当前位置:网站首页>Bus message bus
Bus message bus
2022-07-07 06:57:00 【RB_ VER】
summary
Spring Cloud Bus coordination spring cloud config Use dynamic refresh that enables configuration .
spring cloud bus It's a framework for linking nodes of a distributed system to a lightweight messaging system .
It integrated. Java Event handling mechanism and message middleware function .
Bus Two kinds of message agents are supported :RabbitMQ and Kafka.
spring cloud bus It can manage and disseminate messages between distributed systems , It's like a distributed actuator , Can be used for broadcast state change , Event push, etc , It can also be used as a communication channel between microservices .
Bus : In the system of microservice Architecture , A lightweight message broker is usually used to build a common message topic , And connect all micro service instances in the system . Because messages generated in this topic will be listened and consumed by all instances , So it is called message bus . Each instance on the bus , Can easily broadcast some messages that need to be known to other instances connected to the subject .
The basic principle :config client Instances are listening to MQ The same one topic( The default is SpringCloudBus). When a service refreshes data , It will put this information into topic in , In this way, the other monitors the same topic The service will be informed , Then update your configuration .
spring cloud bus Dynamic refresh global broadcast
design idea :
Use the message bus to trigger a client /bus/refresh, And refresh the location of all clients
Use message bus to trigger a server ConfigServer Of /bus/refresh Endpoint , And refresh the configuration of all clients .
The second architecture is more reasonable , The first unreasonable reason :
- Breaking the single responsibility of microservices , Because microservices themselves are business modules , It should not be responsible for configuration refresh .
- Destroy the peer-to-peer of each microservice node .
- There are certain limitations .
establish cloud-config-center-3344 The module serves as the server of the configuration center .
Please refer to 【 Microservices 】 Integrate spring cloud config.
pom.xml
<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>
<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>
...
application.yml
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
uri: [email protected]:zzyybs/springcloud-config.git
search-paths:
- springcloud-config
label: master
rabbit:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
Configuration required rabbitmq.
newly build cloud-config-client-3366 modular .
pom.xml rely on
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
bootstrap.yml
server:
port: 3366
spring:
application:
name: config-client
cloud:
config:
label: master # Branch name
name: config # Profile name
profile: dev # Read suffix name The above three comprehensive :master On the branch config-dev.yml Configuration file for
uri: http://localhost:3344 # Configure center address
rabbit:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defautZone: http://localhost:7001/eureka
management: # Monitor exposure endpoints
endpoints:
web:
exposure:
include: "*"
ConfigClientMain3366
@EnableEurekaClient
@SpringBootApplication
public class ConfigClientMain3366{
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3366.class,args);
}
}
@RestController
@RefreshScope
public class ConfigClientController{
@Value("${server.port}")
private String serverPort;
@Value("${config.info}")
private String configInfo;![ Insert picture description here ](https://img-blog.csdnimg.cn/1bd0130034f44a7ca19f9923e72157e6.png#pic_center)
@GetMapping("/configinfo")
public String configInfo() {
return "serverPort: "+serverPort+" configInfo: "+configInfo;
}
}
In the same way cloud-config-client-3355 modular .
test :
modify GitHub Add version number to the configuration file :
config:
info: "master branch,springcloud-config/config-dev.yml version=2"
send out post request :
curl -X POST "http://localhost:3344/actuator/bus-refresh"
visit http://localhost:3366/configinfo, Get configuration information , The discovery has been refreshed .
spring cloud bus Dynamic refresh fixed-point notification
It means that a specific instance takes effect instead of all .
http://localhost: Port number of the configuration center /actuator/bus-refresh/{destination}
destination= Microservice name : Port number
边栏推荐
- 华为机试题素数伴侣
- ViewModelProvider.of 过时方法解决
- MySql用户权限
- Programmers' daily | daily anecdotes
- 请问 flinksql对接cdc时 如何实现计算某个字段update前后的差异 ?
- 2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书第二阶段答案
- Pinduoduo lost the lawsuit: "bargain for free" infringed the right to know but did not constitute fraud, and was sentenced to pay 400 yuan
- How to do sports training in venues?
- MySQL SQL的完整处理流程
- AddressSanitizer 技术初体验
猜你喜欢
随机推荐
How to find the literature of a foreign language journal?
from . onnxruntime_ pybind11_ State Import * noqa ddddocr operation error
Data of all class a scenic spots in China in 2022 (13604)
mysql查看bin log 并恢复数据
【mysqld】Can't create/write to file
化工园区危化品企业安全风险智能化管控平台建设四大目标
多个kubernetes集群如何实现共享同一个存储
Basic introduction of JWT
隐马尔科夫模型(HMM)学习笔记
JESD204B时钟网络
Pinduoduo lost the lawsuit: "bargain for free" infringed the right to know but did not constitute fraud, and was sentenced to pay 400 yuan
使用net core优势/为什么使用
Can't you really do it when you are 35 years old?
大咖云集|NextArch基金会云开发Meetup来啦
[start from scratch] detailed process of deploying yolov5 in win10 system (CPU, no GPU)
根据IP获取地市
ESXI挂载移动(机械)硬盘详细教程
This article introduces you to the characteristics, purposes and basic function examples of static routing
.net core 访问不常见的静态文件类型(MIME 类型)
LVS+Keepalived(DR模式)学习笔记