SpringCloud-配置中心

一.配置中心概念

  当有多个微服务时,他们各自的配置文件都需要单独配置,十分复杂,有些公共配置,例如数据库连接池等,如果有一个服务提供配置中心,那么他可以配置所有的服务,其他服务从配置中心中读取所需要的配置信息即可

可以用Git,MySql,Redis来建立配置中心

二.Git上创建配置

1.配置中心服务端

 (1).新建一个仓库config-server,在仓库中创建一个文件config-client-dev.yml

6870ccaa857a4c2ea0fc13338916c561.png

(2).创建一个新项目cloud-config-server-git

(3).引入依赖

<!--         配置中心-->
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-config-server</artifactId>
         </dependency>
     </dependencies>

(4).修改配置文件

spring:
  application:
    name: config-server-git
  cloud:
    nacos:
      server-addr: localhost:8848
    #配置中心配置
    config:
      server:
        git:
          uri: https://gitee.com/ji_jiahao/config-server.git
          username: 1046407954@qq.com
          password: jjh123456
          #访问超时时间
          timeout: 15

(5).在启动类上添加注解@EanbleConfigServer

(6).访问localhost:8888/config-client-dev.yml

5b4e87ca8f564f1788c689ee0a607313.png

成功访问配置文件的信息!

2.创建配置客户端

(1)创建一个config-client项目,

(2)引入客户端依赖 

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>

(3)修改配置文件bootstrap.yml

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
    config:
      discovery:
        enabled: true
        service-id: config-server-git
      profile: dev
      label: master
  application:
    name: config-client

(4)测试接口

@RestController
@RequestMapping
public class TestConfigController {

    @Value("${testKey}")
    private String testKey;

    /**
     * 测试从git中获取配置信息
     * @return
     */
    @GetMapping("/testKey")
    public String getConfigByGit(){
        return testKey;
    }


}

访问获取信息

3.配置的手动刷新

  如果想让配置中心的客户端感知到gitee上的变化,需要改造一下client项目,

(1)在Controller上添加注解@RefreshScope

(2)在pom中添加依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

(3)修改bootstrap.yml,开启刷新节点

management:
  endpoints:
    web:
      exposure:
        #yml加双引号,properties不要加
        include: "*"

当在gitee上修改文件时,在Postman上向cloud-config-client发送一个post请求

http://localhost:8889/actuator/refresh

再次请求testKey时,就跟新了

4.配置的自动刷新

当有很多微服务时,就需要自动刷新了,需要在gitee上设置钩子函数

流程:

 (1)gitee上的修改会触发钩子函数,请求一个配置中心服务端的地址URL-A

(2)URL-A调用服务的端点actuator/bus-refresh

(3)通过步骤(2),将配置更新的消息发送给消息队列RabbitMQ

(4)其他所有定义RabbitMQ的服务监听到消息后,更新自己的配置

(1)在pom中引入依赖

<!--服务端开启refresh端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
<!--        总线-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

(2)修改application.yml

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: jjh123
    password: 123456

(3)写接收钩子函数调用的接口

@RestController
@RequestMapping("/git-webhook")
public class WebhookController {
    
    @Resource
    private RestTemplate restTemplate;
    
    @PostMapping("/bus-refresh")
    public String refresh(){

       HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders();
       
       httpHeaders.add(HttpHeaders.CONTENT_TYPE,"application/json");
        HttpEntity<String> request = new HttpEntity<>(httpHeaders);
        ResponseEntity<String> stringResponseEntity = restTemplate.postForEntity(
                "http://localhost:8889/actuator/bus-refresh",request,String.class
        ) ;
        
        return "webhook刷新成功!";
        
    }
}

(4)设置钩子函数

96d7bdc9aca048e0b337ce64c6872119.png

 

cf0ca4456bc843e693870af0872b1bfc.png

三.MySQL上创建配置

1.创建config_server表

52f2a98c091745f7b10d485074d30bb5.png

2.在pom中引入依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

3.修改bootstrap.yml文件

spring:
  cloud:
    config:
      server:
        default-lable: dev
        jdbc:
          sql: SELECT config_key,config_value, FROM config_server where application_name
          =? and config_profile=? and config_lable=?
  datasource:
    nacos:
      server-addr: localhost:8848    
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/config?characterEncoding=UTF-8&serverTimeZone=Asia/Shanghai
    username: root
    password: 123456
  profiles:
    active: jdbc
    
  application:
    name: config-client

这样就脱离了gitee,将配置信息存储在Mysql中了

四.Nacos配置中心

1.新建配置

 6aa58d48cff747f389cf4d6406af36a0.png

25c728246a264523bb23b5f1d116a57a.png

2.添加依赖

<!--        配置中心-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
    </dependencies>

3.修改bootstrap.yml

  cloud:
    nacos:
      server-addr: localhost:8848
      #配置中心
      config:
        # 从nacos中获取
        file-extension: yaml
        group: DEFAULT_GROUP
    

3.编写接口测试

    @Value("${name}")
    private String name;





    /**
     * 测试从nacos获取配置信息
     * @return
     */
    @GetMapping("/testname")
    public String getConfigMsg(){
        return name;
    }

4.命名空间环境隔离

不同的命名空间之间互相隔离,创建一个命名空间namespace

36033341c9a7401aa18062396ad3be32.png

在yml上吧id写上

  cloud:
    nacos:
      server-addr: localhost:8848
      #配置中心
      config:
        # 从nacos中获取
        file-extension: yaml
        group: DEFAULT_GROUP
        namespace: 30270da9-b363-4e6f-b88e-5e70c5889f37

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值