第二十一节--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次刷新,如果是小项目可以用以上方式满足,但是如果是大项目就会不好维护
 
如何去通知某些服务修改配置,因为不可能所有的微服务都让修改,比如一部分稳定不想打包的肯定不改配置文件,只修改其中的一部分。
下一节高级教程部分消息通知完成这个功能
 
 
posted @ 2020-09-16 22:44  hexu_blog  阅读(271)  评论(0编辑  收藏  举报