标签:lease 运行 default version pen set context article logout
0. 前言
一个完整的微服务解决方案包含了许多微服务,基于我们需要观察各个微服务的运行状态,因此Spring Boot 生态提供了Spring Boot Admin 这个组件来实现微服务管理WEB UI。但是整体的注册中心还是基于Eureka,只是WebUI是用这个Spring Boot Admin 来显示而已。具体的结构如下所示
1. Eureka服务
这个没什么好说的,按照创建一个微服务的流程,通过 Spring Starter 工具,自动生成一个Eureka微服务。主要就是配置Application.java application.yml pom.xml 这三个文件。
pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.wunaozai.eureka</groupId> 7 <artifactId>global-service-eureka</artifactId> 8 <version>0.0.1</version> 9 <packaging>jar</packaging> 10 11 <name>global-service-eureka</name> 12 <description>服务注册中心</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.1.0.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 <spring-cloud.version>Greenwich.M2</spring-cloud.version> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.cloud</groupId> 31 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 32 </dependency> 33 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-test</artifactId> 37 <scope>test</scope> 38 </dependency> 39 </dependencies> 40 41 <dependencyManagement> 42 <dependencies> 43 <dependency> 44 <groupId>org.springframework.cloud</groupId> 45 <artifactId>spring-cloud-dependencies</artifactId> 46 <version>${spring-cloud.version}</version> 47 <type>pom</type> 48 <scope>import</scope> 49 </dependency> 50 </dependencies> 51 </dependencyManagement> 52 53 <build> 54 <plugins> 55 <plugin> 56 <groupId>org.springframework.boot</groupId> 57 <artifactId>spring-boot-maven-plugin</artifactId> 58 </plugin> 59 </plugins> 60 </build> 61 62 <repositories> 63 <repository> 64 <id>spring-milestones</id> 65 <name>Spring Milestones</name> 66 <url>https://repo.spring.io/milestone</url> 67 <snapshots> 68 <enabled>false</enabled> 69 </snapshots> 70 </repository> 71 </repositories> 72 73 </project>
application.yml 这里我配置两份,一份EUREKA1:8761 一份EUREKA:8762
1 server: 2 port: 8761 3 4 spring: 5 application: 6 name: EUREKA服务注册中心 7 8 management: 9 endpoints: 10 web: 11 exposure: 12 include: 13 - "*" 14 endpoint: 15 health: 16 show-details: ALWAYS 17 18 eureka: 19 client: 20 # register-with-eureka: false 21 # fetch-registry: false 22 service-url: 23 defaultZone: http://EUREKA1:8761/eureka/,http://EUREKA2:8762/eureka/ 24 instance: 25 hostname: EUREKA1
Application.java
1 package com.wunaozai.eureka; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 7 @EnableEurekaServer 8 @SpringBootApplication 9 public class GlobalServiceEurekaApplication { 10 11 public static void main(String[] args) { 12 SpringApplication.run(GlobalServiceEurekaApplication.class, args); 13 } 14 }
2. Spring Boot Admin 服务
默认是不需要帐号密码登录的,我这里配置一下spring-boot-starter-security 增加帐号密码登录
pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.1.2.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.wunaozai.admin.demo</groupId> 12 <artifactId>spring-cloud-admin-demo</artifactId> 13 <version>0.0.1</version> 14 <name>spring-cloud-admin-demo</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>1.8</java.version> 19 <spring-boot-admin.version>2.1.1</spring-boot-admin.version> 20 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> 21 </properties> 22 23 <dependencies> 24 <dependency> 25 <groupId>de.codecentric</groupId> 26 <artifactId>spring-boot-admin-starter-server</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>de.codecentric</groupId> 30 <artifactId>spring-boot-admin-starter-client</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework.cloud</groupId> 34 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework.cloud</groupId> 38 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 39 </dependency> 40 41 <dependency> 42 <groupId>org.springframework.boot</groupId> 43 <artifactId>spring-boot-starter-security</artifactId> 44 </dependency> 45 46 47 <dependency> 48 <groupId>org.springframework.boot</groupId> 49 <artifactId>spring-boot-devtools</artifactId> 50 <scope>runtime</scope> 51 </dependency> 52 <dependency> 53 <groupId>org.springframework.boot</groupId> 54 <artifactId>spring-boot-starter-test</artifactId> 55 <scope>test</scope> 56 </dependency> 57 </dependencies> 58 59 <dependencyManagement> 60 <dependencies> 61 <dependency> 62 <groupId>de.codecentric</groupId> 63 <artifactId>spring-boot-admin-dependencies</artifactId> 64 <version>${spring-boot-admin.version}</version> 65 <type>pom</type> 66 <scope>import</scope> 67 </dependency> 68 <dependency> 69 <groupId>org.springframework.cloud</groupId> 70 <artifactId>spring-cloud-dependencies</artifactId> 71 <version>${spring-cloud.version}</version> 72 <type>pom</type> 73 <scope>import</scope> 74 </dependency> 75 </dependencies> 76 </dependencyManagement> 77 78 <build> 79 <plugins> 80 <plugin> 81 <groupId>org.springframework.boot</groupId> 82 <artifactId>spring-boot-maven-plugin</artifactId> 83 </plugin> 84 </plugins> 85 </build> 86 87 </project>
applicatoin.yml
1 server: 2 port: 8788 3 4 spring: 5 boot: 6 admin: 7 client: 8 url: 9 - "http://ADMIN:8788" #这里配置Spring Boot Admin 服务地址,配置这里表示把自己注册到Admin上,如果使用Eureka服务发现的,这部分可以省略 10 username: ‘user‘ 11 password: ‘password‘ 12 application: 13 name: WEB服务监控中心 14 security: 15 user: 16 name: ‘user‘ 17 password: ‘password‘ 18 19 20 management: 21 endpoints: 22 web: 23 exposure: 24 include: 25 - "*" 26 endpoint: 27 health: 28 show-details: ALWAYS 29 30 info: 31 version: ${spring.application.name}:${server.port} 32 33 34 eureka: 35 instance: 36 lease-renewal-interval-in-seconds: 10 37 health-check-url-path: /actuator/health 38 # 注册给eureka的时候告诉eureka自己的密码 39 metadata-map: 40 "user.name": ${spring.security.user.name} 41 "user.password": ${spring.security.user.password} 42 prefer-ip-address: true 43 client: 44 registry-fetch-interval-seconds: 5 45 # fetch-registry: false 46 # register-with-eureka: false 47 service-url: 48 defaultZone: ${EUREKA_SERVICE_URL:http://EUREKA1:8761}/eureka/,${EUREKA_SERVICE_URL:http://EUREKA2:8762}/eureka/
Application.java
1 package com.wunaozai.admin.demo; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 6 import org.springframework.context.annotation.Configuration; 7 import org.springframework.security.config.annotation.web.builders.HttpSecurity; 8 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 9 import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; 10 11 import de.codecentric.boot.admin.server.config.AdminServerProperties; 12 import de.codecentric.boot.admin.server.config.EnableAdminServer; 13 14 @Configuration 15 @EnableAdminServer 16 @EnableEurekaClient 17 @SpringBootApplication 18 public class SpringCloudAdminDemoApplication { 19 20 public static void main(String[] args) { 21 SpringApplication.run(SpringCloudAdminDemoApplication.class, args); 22 } 23 24 @Configuration 25 public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter { 26 private final String adminContextPath; 27 28 public SecuritySecureConfig(AdminServerProperties prop) { 29 this.adminContextPath = prop.getContextPath(); 30 } 31 32 @Override 33 protected void configure(HttpSecurity http) throws Exception { 34 SavedRequestAwareAuthenticationSuccessHandler handler = new SavedRequestAwareAuthenticationSuccessHandler(); 35 handler.setTargetUrlParameter("redirectTo"); 36 37 http.authorizeRequests() 38 .antMatchers(adminContextPath + "/assets/**").permitAll() 39 .antMatchers(adminContextPath + "/login").permitAll() 40 .antMatchers(adminContextPath + "/actuator/**").permitAll() 41 .anyRequest().authenticated() 42 .and() 43 .formLogin().loginPage(adminContextPath + "/login").successHandler(handler) 44 .and() 45 .logout().logoutUrl(adminContextPath + "/logout").and() 46 .httpBasic().and().csrf().disable(); 47 } 48 } 49 }
3. Spring Boot Client 服务(配置到Eureka服务)
这里就配置Eureka Client 即可
pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.1.2.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.wunaozai.client.demo</groupId> 12 <artifactId>spring-cloud-client-demo</artifactId> 13 <version>0.0.1</version> 14 <name>spring-cloud-client-demo</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>1.8</java.version> 19 <spring-boot-admin.version>2.1.1</spring-boot-admin.version> 20 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> 21 </properties> 22 23 <dependencies> 24 <dependency> 25 <groupId>de.codecentric</groupId> 26 <artifactId>spring-boot-admin-starter-client</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-web</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework.cloud</groupId> 34 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework.cloud</groupId> 38 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 39 </dependency> 40 41 <dependency> 42 <groupId>org.springframework.boot</groupId> 43 <artifactId>spring-boot-devtools</artifactId> 44 <scope>runtime</scope> 45 </dependency> 46 <dependency> 47 <groupId>org.springframework.boot</groupId> 48 <artifactId>spring-boot-starter-test</artifactId> 49 <scope>test</scope> 50 </dependency> 51 </dependencies> 52 53 <dependencyManagement> 54 <dependencies> 55 <dependency> 56 <groupId>de.codecentric</groupId> 57 <artifactId>spring-boot-admin-dependencies</artifactId> 58 <version>${spring-boot-admin.version}</version> 59 <type>pom</type> 60 <scope>import</scope> 61 </dependency> 62 <dependency> 63 <groupId>org.springframework.cloud</groupId> 64 <artifactId>spring-cloud-dependencies</artifactId> 65 <version>${spring-cloud.version}</version> 66 <type>pom</type> 67 <scope>import</scope> 68 </dependency> 69 </dependencies> 70 </dependencyManagement> 71 72 <build> 73 <plugins> 74 <plugin> 75 <groupId>org.springframework.boot</groupId> 76 <artifactId>spring-boot-maven-plugin</artifactId> 77 </plugin> 78 </plugins> 79 </build> 80 81 </project>
applicatoin.yml
1 server: 2 port: 18889 3 spring: 4 # boot: 5 # admin: 6 # client: 7 # url: 8 # - "http://127.0.0.1:8788" 9 # username: ‘user‘ 10 # password: ‘password‘ 11 application: 12 name: 子业务服务器 13 14 management: 15 endpoints: 16 web: 17 exposure: 18 include: 19 - "*" 20 endpoint: 21 health: 22 show-details: ALWAYS 23 24 #eureka: 25 # client: 26 # fetch-registry: false 27 # register-with-eureka: false 28 eureka: 29 instance: 30 lease-renewal-interval-in-seconds: 10 31 health-check-url-path: /actuator/health 32 prefer-ip-address: true 33 client: 34 registry-fetch-interval-seconds: 5 35 service-url: 36 defaultZone: ${EUREKA_SERVICE_URL:http://172.16.23.241:8761}/eureka/ 37 38
Application.java
1 package com.wunaozai.client.demo; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 6 7 @EnableEurekaClient 8 @SpringBootApplication 9 public class SpringCloudClientDemoApplication { 10 11 public static void main(String[] args) { 12 System.out.println("ok"); 13 SpringApplication.run(SpringCloudClientDemoApplication.class, args); 14 } 15 16 }
4. Spring Boot Client 服务(直接配置Admin地址)
如果不想通过Eureka,只是用Spring Boot Admin,可以只配置Admin的地址来实现。通过在application.yml 配置
1 spring: 2 boot: 3 admin: 4 client: 5 url: 6 - "http://127.0.0.1:8788" 7 username: ‘user‘ 8 password: ‘password‘
5. 举个例子(基于docker-compose)
使用mvn package 把以上3个微服务打包成Docker镜像
Dockerfile 文件
1 FROM java:8 2 VOLUME /tmp 3 4 ADD spring-cloud-admin-demo-0.0.1.jar app.jar 5 RUN bash -c ‘touch /app.jar‘ 6 7 EXPOSE 8788 8 9 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
Build 构建镜像
1 docker build -t wunaozai/eureka:0.0.1 -f Dockerfile .
docker-compose.yml 文件
1 version: ‘3‘ 2 3 services: 4 EUREKA1: 5 image: eureka:1 6 ports: 7 - 8761:8761 8 EUREKA2: 9 image: eureka:2 10 ports: 11 - 8762:8762 12 ADMIN: 13 image: admin:1 14 ports: 15 - 8788:8788 16 client-1: 17 image: client:1 18 ports: 19 - 18881:18888 20 client-2: 21 image: client:1 22 ports: 23 - 18882:18888 24 client-3: 25 image: client:1 26 ports: 27 - 18883:18888 28 client-4: 29 image: client:1 30 ports: 31 - 18884:18888 32 client-5: 33 image: client:1 34 ports: 35 - 18885:18888 36 client-6: 37 image: client:1 38 ports: 39 - 18886:18888 40 client-7: 41 image: client:1 42 ports: 43 - 18887:18888 44 client-8: 45 image: client:1 46 ports: 47 - 18888:18888
日志界面
WeaveScope 界面
Eureka 界面
Spring Boot Admin 界面
如果出现这个问题,请升级到最新的浏览器(Chrome) 一开始用Chrome 59,不行,升级到Chrome 71 才可以。
参考资料
https://blog.csdn.net/kinginblue/article/details/52132113
https://blog.csdn.net/hubo_88/article/details/80671192
本文地址: https://www.cnblogs.com/wunaozai/p/10313190.html
物联网架构成长之路(30)-Spring Boot Admin微服务WebUI监控
标签:lease 运行 default version pen set context article logout
原文地址:https://www.cnblogs.com/wunaozai/p/10313190.html