RabbitMq是一个消息队列的程序。。用来在各个应用之前相互通信。这里主要是给spring cloud集群做广播用的。
rabbitMq消费者-生产者模式。一端不停的写入信息,另一端可以读取和订阅队列中的信息。
安装好之后,启动服务即可。通过localhost:15672即可访问,默认有guest/guest密码。
安装需要先安装erlang这个平台,然后安装rabbit,最好每一步都用管理员权限来安装打开。
spring cloud中整合rabbitMq
在pom中添加,相应的依赖
org.springframework.cloud
spring-cloud-starter-bus-amqp
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
org.springframework.cloud
spring-cloud-config-server
配置文件----注意:看最后一句。不是我写错,真的是冒号。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的配置文件。包括后面的热加载配置文件。
org.springframework.cloud
spring-cloud-starter-bus-amqp
org.springframework.boot
spring-boot-starter-actuator
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配置文件内容了