当前位置:网站首页>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 .
 Insert picture description here
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
     Insert picture description here

  • Use message bus to trigger a server ConfigServer Of /bus/refresh Endpoint , And refresh the configuration of all clients .
     Insert picture description here  Insert picture description here

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

原网站

版权声明
本文为[RB_ VER]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207070240153628.html