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的配置信息都发生了变更。

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

相关推荐
lazy H19 小时前
Spring Boot 项目如何连接 Redis?新手入门配置和常见错误总结
ide·spring boot·redis·后端·学习·intellij-idea
SXJR19 小时前
spring boot + langchain4j +milvus实现向量存储
java·spring boot·后端·大模型·milvus·rag·langchain4j
王木风19 小时前
Spring Boot + LLM 工程化:把短视频流水线拆成 16 个独立角色的踩坑记录
人工智能·spring boot·后端·开源·新媒体运营·音视频·agent
武子康19 小时前
Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC 从 XML 配置到 BeanFactory 反射注入
java·后端·mybatis
二哈赛车手19 小时前
新人笔记---idea索引失效问题解决方案
java·笔记·spring·elasticsearch·intellij-idea
月光刺眼19 小时前
Bun + TypeScript 后端入门:从类型约束到 LLM API 调用
后端·typescript
万岳科技19 小时前
教育培训系统开发流程详解:平台建设关键环节解析
数据库·后端·学习
Java编程爱好者19 小时前
服务里的 Redis 锁惊群问题:一次本地合流优化实践
后端
Nturmoils19 小时前
线上修一批脏数据,先别急着全量重来
数据库·后端
飞天狗11120 小时前
零基础JavaWeb入门——第五课第一小节:九大内置对象 · 第1个:request(请求对象)
java·开发语言·前端·后端·servlet