我需要实现从两个服务器的队列中侦听。队列名称相同。第一个服务器是主服务器,第二个是备份服务器。 当主服务器关闭时,应继续使用备份服务器队列。
我的课程:
@RabbitListener(queues = "to_client")
public class ClientRabbitService {
现在我使用RoutingConnectionFactory:
@Bean
@Primary
public ConnectionFactory routingConnectionFactory() {
SimpleRoutingConnectionFactory rcf = new SimpleRoutingConnectionFactory();
Map<Object, ConnectionFactory> map = new HashMap<>();
map.put("[to_kernel]", mainConnectionFactory());
map.put("[to_kernel_reserve]", reserveConnectionFactory());
map.put("[to_client]", mainConnectionFactory());
rcf.setTargetConnectionFactories(map);
return rcf;
}
[to_kernel]和[to_kernel_reserve] - 仅发送消息的队列,[to_client] - 接收消息。
有什么想法吗?
答案 0 :(得分:0)
备份服务器上的队列是否仅在主服务器关闭时填充?如果是,您可以始终监听两个队列(当主服务器启动时,辅助服务器上的队列将为空)。
请注意,如果使用RabbitMQ群集,您的解决方案会更可靠。 然后,您连接到群集(您指定群集中所有计算机的地址)。
官方文档https://docs.spring.io/spring-amqp/reference/htmlsingle/#connections
对此进行了解释或者,如果在群集环境中运行,请使用 地址属性。
<rabbit:connection-factory id="connectionFactory" addresses="host1:5672,host2:5672"/>
使用群集时,您将拥有单个队列(跨群集复制)。请注意,RabbitMQ在使用复制时会受到严重影响,请务必阅读官方文档,了解如何配置群集https://www.rabbitmq.com/clustering.html