注册中心Eureka和配置中心config server
这两个呢都是spring cloud里的技术,使用也是很广泛的.
先说eureka:
首先把项目中关于nacos的部分都注释掉:
创建一个新的module,eureka不像nacos,需要自己创建module,添加依赖和进行相关的配置:
添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置application.yml文件:
server:
port: 2001
spring:
application:
name: eureka-server
eureka:
server:
#自我保护 当有超过85%的服务心跳出现异常时进入保护状态
#在测试时关闭 部署项目时开启
enable-self-preservation: false
instance:
hostname: eureka01
client:
#不向自身注册
register-with-eureka: false
#不向自身拉去注册信息
fetch-registry: false
修改一下hosts文件,加这么两句:
127.0.0.1 eureka01
127.0.0.1 eureka02
写一个启动类:
@EnableEurekaServer
@SpringBootApplication
public class eurekaApplication {
public static void main(String[] args) {
SpringApplication.run(eurekaApplication.class,args);
}
}
然后就可以启动了,输入http://eureka01:2001/查看
![(https://img-blog.csdnimg.cn/ae49cd00737740a495e5bed985c46f99.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzE1NTMwNw==,size_16,color_FFFFFF,t_70)
接着在auth和resource中添加Eureka的依赖,完成注册
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
添加yml配置:
eureka:
client:
service-url:
defaultZone: http://eureka01:2001/eureka
在启动类上添加@EnableEurekaClient.启动项目
报了如下错误:
原因是没有注释nacos的两个依赖.
重新启动
注册成功!
服务的高可用和注册中心的高可用:
修改启动的端口,然后启动两个服务
在到Eureka中查看:
我们将eureka的配置文件复制两份,并且做出修改:
eureka01:
server:
port: 2001
spring:
application:
name: eureka-server01
eureka:
instance:
hostname: eureka01
client:
service-url:
defaultZone: http://eureka02:2002/eureka
fetch-registry: true
register-with-eureka: true
eureka02:
server:
port: 2002
spring:
application:
name: eureka-server02
eureka:
instance:
hostname: eureka02
client:
service-url:
defaultZone: http://eureka01:2001/eureka
fetch-registry: true
register-with-eureka: true
修改启动时使用的配置文件
修改defaultZone:
eureka:
client:
service-url:
defaultZone: http://eureka01:2001/eureka, http://eureka02:2002/eureka
configserver
configserver将配置文件放在git上,如github或gitte,在项目运行时从git获取:
新建一个configserver的module:
添加依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
配置yml文件:
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/你的项目目录
search-paths: config
eureka:
client:
service-url:
defaultZone: http://eureka01:2001/eureka, http://eureka02:2002/eureka
server:
port: 7001
创建一个文件夹 config,并且把auth和resource的yml文件复制到此处并改名:
配置configserver的启动类,添加两个注解:
@EnableEurekaClient
@EnableConfigServer
@SpringBootApplication
public class ConfigserverApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigserverApplication.class, args);
}
}
先开启eureka,再启动configserver,查看http://localhost:7001/auth-dev.yml是否存在.
在common中添加config client的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
在auth和resource创建一个bootstrap.yml,用于连接config server获取配置文件:
auth:
spring:
cloud:
config:
discovery:
service-id: config-server
enabled: true
name: auth
profile: dev
eureka:
client:
service-url:
defaultZone: http://eureka01:2001/eureka, http://eureka02:2002/eureka
resource:
spring:
cloud:
config:
discovery:
service-id: config-server
enabled: true
name: resource
profile: dev
eureka:
client:
service-url:
defaultZone: http://eureka01:2001/eureka, http://eureka02:2002/eureka
最后启动进行测试:
到这里已经完成了,最后在配置一下动态刷新,可以在运行时重新往config server获取配置.
我们以auth为例子:
添加actuator依赖(关于actuator看这里:https://blog.csdn.net/tangyaya8/article/details/81157747)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在auth-dev.yml中添加:
management:
endpoints:
web:
exposure:
include: refresh
UserController中添加:
@GetMapping("/name")
public String getname(){
return userService.getname();
}
UserService添加:
@Value("${spring.application.name}")
private String name;
public String getname() {
return name;
}
查看http://localhost:8081/name
修改auth-dev.yml
spring:
application:
name: sso01-auth
使用postman以post方式访问http://localhost:8081/actuator/refresh来刷新配置
查看http://localhost:8081/name
记得