Springcloud-消息总线-Bus代码部分

整合项目

创建config-bus-server和config-bus-consumer

启动RabbitMQ,修改demo的配置属性

使用Actuator服务推送BUS变更

1.config-bus-server项目:

(1)相关依赖:

复制代码
    <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>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

(2)application.yml文件配置

java 复制代码
spring:
  application:
    name: config-bus-server
  rabbitmq:
    host: #ip地址
    port: 5672
    username: guest
    password: guest
    virtual-host: /
    connection-timeout: 15000
  cloud:
    config:
      server:
        git:
          uri: #你的项目地址
          # 强制拉取资源文件
          force-pull: true 
          default-label: main
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:20000/eureka/

server:
  port: 60002

# actuator
management:
  endpoints:
    web:
      exposure:
        include: '*'
  security:
    enabled: false  

(3)启动类

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class ConfigBusServerApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(ConfigBusServerApplication.class)
                .web(WebApplicationType.SERVLET)
                .run(args);
    }
}

(4)启动项目,进行测试:

postman测试:

成功获取自定义配置的信息:

查询开放的端口信息:

http://localhost:60002/actuator

信息截图:

2.config-bus-client

(1)相关依赖

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

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

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<!-- rabbit mq -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

<!-- kafka -->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-bus-kafka</artifactId>-->
<!--</dependency>-->

(2).bootstrap.yml配置文件

java 复制代码
spring:
  application:
    name: config-bus-client
  rabbitmq:
    host: ip地址
    port: 5672
    username: guest
    password: guest
    virtual-host: /
    connection-timeout: 15000
  cloud:
    stream:
      default-binder: rabbit
    config:
#      uri: 项目ip
      discovery:
        enabled: true
        service-id: config-bus-server
      profile: prod
      label: main
      name: config-consumer

server:
  port: 61002

myWords: ${words}

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:20000/eureka/

management:
  security:
    enabled: false
  endpoints:
    web:
      exposure:
        include: "*"

(3)启动类

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class ConfigBusClientApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(ConfigBusClientApplication.class)
                .web(WebApplicationType.SERVLET)
                .run(args);
    }
}

(4)Controller

java 复制代码
@RestController
public class Controller {

//    直接从外部的配置文件加载
    @Value("${name}")
    private String name;

//    首先将外部的属性注入到自己项目中的配置文件,再从配置文件中加载
    @Value("${myWords")
    private String words;

    @GetMapping("/name")
    public String getName(){
        return name;
    }

    @GetMapping("/words")
    public String getWords(){
        return words;
    }
}

(5)RefreshController

java 复制代码
@RestController
@RequestMapping("/refresh")
@RefreshScope
public class RefreshController {

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

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

    @GetMapping("/words")
    public String getWords() {
        return words;
    }

    @GetMapping("/dinner")
    public String dinner(){
        return "May I have one " + food;
    }
}

(6)测试:

因为要测试批量的消息变更,所以config-bus-client需要启动多实例。

没有变更配置信息之前。

测试端口:

测试的结果都为:

修改配置中心配置文件。

触发刷新:

重新测试获取配置:

信息已经发生变动:

再次更新配置信息。

这次只更新61001节点

同时,61001与61002的配置信息都发生了变更。

说明:刷新请求不管是发送到配置中还是配置中心下面的节点,都会完美触发刷新动作。

相关推荐
小爷毛毛_卓寿杰1 小时前
我和 TRAE AI聊了聊,它帮我为五迷老师们做了个城市漫游小程序!
前端·人工智能·后端
SimonKing1 小时前
FreeLLMAPI:24 家厂商、128 个模型、1 个 Key智能切换所有可用的模型
java·后端·程序员
IT_陈寒2 小时前
React useEffect里面写异步,我的状态怎么老丢?
前端·人工智能·后端
LiaoWL1232 小时前
【SpringCloud合集-02】Spring Cloud LoadBalancer 负载均衡器学习笔记
学习·spring cloud·负载均衡
程序员爱钓鱼3 小时前
第一个 Rust 程序 Hello World
后端·rust
卷福同学9 小时前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
小明bishe1811 小时前
计算机毕业设计之基于JAVA的植物科普网站
java·spring boot·spring·架构·课程设计
GetcharZp12 小时前
只需 10 分钟,轻松实现异地组网!Netmaker 保姆级部署教程来了
后端
前端兰博12 小时前
03-Spring Boot
后端