RabbitMq与spring cloud bus整合serverConfig热加载及介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvhao2813/article/details/81505318

RabbitMq是一个消息队列的程序。。用来在各个应用之前相互通信。这里主要是给spring cloud集群做广播用的。

rabbitMq消费者-生产者模式。一端不停的写入信息,另一端可以读取和订阅队列中的信息。

安装好之后,启动服务即可。通过localhost:15672即可访问,默认有guest/guest密码。

安装需要先安装erlang这个平台,然后安装rabbit,最好每一步都用管理员权限来安装打开。

spring cloud中整合rabbitMq

在pom中添加,相应的依赖

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

 application.yml配置文件,增加rabbitMq的访问地址以及端口,还要登录的用户名和密码,用来连接binding、获得队列信息等。

spring:
    rabbitmq:
        host: 192.168.xx.xx
        port: 5672
        username: test
        password: test

首先我们需要创建一个队列。

@Configuration
public class RabbitConfig {
	@Bean
	public Queue helloQueue() {
		return new Queue("hello");
	}
}

我们在生产者,不断往队列发送消息。

    @Autowired
	private AmqpTemplate amqpTemplate;
	
	@RequestMapping(value = "/provide", method = RequestMethod.GET, produces = 
        MediaType.APPLICATION_JSON_VALUE)
	public String service() {
		String input = "我是提供者";
		
		this.amqpTemplate.convertAndSend("hello",input+"通过rabbitmq发消息给你!");
		return input;
	}

接受者,可以在当前应用,也可以是其他应用。也就是其他的项目组。不过需要连接同样的rabbitMq。

接受hello队列消息,可以是多个,默认只要有一个接受,其他的就不会接受了。也可以配置全部接受等。

@Component
@RabbitListener(queues = "hello")
public class Receiver {
	@RabbitHandler
	public void process(String msg) {
		System.out.println("Receiver:" + msg);
	}
}

这是一个简单的 rabbitMq的应用。。

在实际项目中,我们通过rabbitMq对配置文件(在git等上面)进行热加载。

我们需要配置,一个配置文件管理服务server-config。专门设置哪个git下面的配置文件

引入pom

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

配置文件----注意:看最后一句。不是我写错,真的是冒号。srping的一个坑,如果用uml就不会出现这种问题。。所以建议大家用yml

这个配置文件服务,依然注册到
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/
git的访问路径
spring.cloud.config.server.git.uri=
搜索哪个路径下的配置文件
spring.cloud.config.server.git.search-paths=
spring.cloud.config.label=master
用户名
spring.cloud.config.username
密码
spring.cloud.config.password
声明暴露的接口,用来在客户端你刷新使用
management.endpoints.web.exposure.include: bus-refresh

在启动类,增加注解

这是服务端提供服务,我们需要客户端,让客户端来读取git的配置文件。包括后面的热加载配置文件。

<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>

bus-amqp,会帮你

它帮你提供了actuator/bus-refresh访问实现。只需要访问,就可以刷新git的配置文件。我们只需修改git的配置文件就可以刷新本地的配置文件。

客户端配置文件:

1.首先客户端也是作为eureka的服务。

spring.application.name=configclient

server.port=8782

eureka.client.serviceUrl.defaultZone=http://127.0.0.1:${server.port}/eureka/

接下来才配置作为配置文件,,

bootstrap文件会比application先读取。

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=service-config
spring.cloud.config.uri= http://192.168.xx.xxx:8781/

spring.cloud.config.label=master
spring.cloud.config.profile=dev
management.security.enabled=false
spring.cloud.bus.trace.enabled=true

management.endpoints.web.exposure.include: bus-refresh

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

最后我们配置启动类,以及测试的方法

启动后,env的属性值,是在git的配置文件中的。我们发现可以获取到。

想要实时更新,执行localxxxxx/bus-refresh即可更新。。。这里不提供get方法。。。所以需要用post来发送这个请求。

然后就获取到最新的git配置文件内容了

猜你喜欢

转载自blog.csdn.net/lvhao2813/article/details/81505318