第二十一节--config配置
config目前被Nacos替代
使用config一般都是把通用的配置提取出来,不是通用的自己在微服务上配置:比如说几个微服务连接同一数据库,这些配置就可以单独提取出出来
具体一点的看第一季教程
服务端搭建
第一步:搭建工程cloud-config-3344 ,pom.xml中添加依赖
<!--springcloud-config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
第二步:yml文件
server:
port: 3344
spring:
application:
name: cloud-config-service #eureka对外暴露服务名字
cloud:
config:
server:
git:
uri: https://github.com/hexu123456/springcloudconfig.git # github仓库上的地址 名字
label: master #指定读取的分支 默认是读取master分支
eureka:
instance:
instance-id: cloud-config-service-3344 #改变客户端在服务端显示的名称
prefer-ip-address: true #访问路径显示IP地址
client: #讲客户端注册到服务器
service-url:
#defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/,http://eureka7003:7003/eureka/
defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/
第三步:主启动类加上@EnableConfigServer 开启config服务端
第四步:启动服务访问master分支 http://localhost:3344/master/application-dev.yml
新建config客户端工程
第一步:客户端新添加依赖cloud-config-client-3355
<!--springcloud-config客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
第二步:新建bootstrap.yml文件
spring:
cloud:
config:
name: idea-application-config #需要从github上读取的资源文件名称,注意没有yml后缀名
profile: dev #本次访问的配置项
label: master
uri: http://localhost:3344 #本微服务启动后先去找3344号服务,通过springcloudconfig获取github的服务地址
新建application.yml文件
spring:
application:
name: config-consumer-service
两个文件最后会结合再一起
第三步:测试,写一个controller查看得到的配置信息即可
@RestController public class ConfigClientRest { @Value("${spring.application.name}") private String applicationName; @Value("${eureka.client.service-url.defaultZone}") private String eurekaServers; @Value("${server.port}") private String port; @RequestMapping("/myconfig") public String getConfig(){ String str="applicationName:"+applicationName+"\t eurekaServers:"+eurekaServers+"\t port: "+port; System.out.println("*******str:"+str); return "applicationName:"+applicationName+"\t eurekaServers:"+eurekaServers+"\t port: "+port; } }
打印出的日志刚好是我们远程配置的内容
3344只要github上文件修改之后会自动检测到,自动刷新
存在的问题:每修改一次githun上的配置文件,就必须从启一次服务配置端3355, 然后3355才能读到配置信息,如果有多个客户端就不好处理
如何实现手动刷新,修改github上配置文件之后不重启客户端项目
第一步:在boostrap.yml文件上加
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
第二步:在需要刷新的类上加注解
@RestController @RefreshScope //让当前类具备刷新功能 github config配置上如果更改了任何内容,这个位置会自动刷新,不用从启 public class ConfigClientRest {
第三步:再次测试,启动好项目之后访问8201没问题
在github上修改了8201为8203再重新刷新,发现没有任何作用,没有更新
第四步:修改配置文件之后需要运维工程师再执行一步:发送Post请求刷新3355(必须是post请求):去下载一个 curl,进入bin目录使用dos命令执行
curl -X POST "http://localhost:3355/actuator/refresh"
执行成功之后我们再去刷新:发现得到的端口变为8203了
目前还有什么问题?如何很多个微服务,不可能要去执行N次刷新,如果是小项目可以用以上方式满足,但是如果是大项目就会不好维护
如何去通知某些服务修改配置,因为不可能所有的微服务都让修改,比如一部分稳定不想打包的肯定不改配置文件,只修改其中的一部分。
下一节高级教程部分消息通知完成这个功能