spring-boot - Spring RabbitMQ Consumer - 多个实例
问题描述
我创建了一个 Spring Boot 应用程序,它创建了一个从 RabbitMQ 主题交换中使用的队列。现在我希望能够运行此应用程序的多个实例以实现高可用性和负载平衡。但是,我注意到当我在队列中发布消息时,两个应用程序都在处理该消息。有没有办法配置队列/应用程序,以便消息仅由相同的应用程序之一使用?
请在下面找到我的配置:
@Bean
public TopicExchange dLQExchange() {
return ExchangeBuilder.topicExchange("queue.dlq").build();
}
@Bean
Queue dlq() {
return QueueBuilder.durable("queue.dlq").build();
}
@Bean
Queue queue() {
return QueueBuilder.durable("queue")
.deadLetterExchange("queue.dlq")
.build();
}
@Bean
public Binding dlqBinding(TopicExchange dLQExchange, Queue dlq) {
return BindingBuilder.bind(dlq).to(dLQExchange).with("#");
}
@Bean
public TopicExchange producerExchange() {
return ExchangeBuilder.topicExchange("producer.exchange").build();
}
@Bean
public Binding producer(
TopicExchange producerExchange, Queue queue) {
return BindingBuilder.bind(queue)
.to(producerExchange)
.with("queue.updated");
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(producerJackson2MessageConverter());
return rabbitTemplate;
}
@Bean
public Jackson2JsonMessageConverter producerJackson2MessageConverter() {
return new Jackson2JsonMessageConverter();
}
解决方案
推荐阅读
- java - java import 语句有问题,错误的类文件包含错误的类
- tensorflow - TensorFlow 逐层执行时间与网络层时间
- node.js - 我如何在 Dialogflow 响应中获取参数
- gradle - 在 IntelliJ 中集成我的自定义注释处理器 jar 时获取 java.lang.NoClassDefFoundError: com/squareup/javapoet/MethodSpec
- javascript - 需要一个合适的加载器来处理图像文件
- android - Android:使用硬件传感器检测手机上下移动
- python - 使用 gettattr 从属性中获取属性
- postgresql - 为什么 PostgreSQL 不使用我的 gin_trgm_ops 索引来加速这个查询?
- gis - ArcPro 中道路网络的距离
- perl - unchecking HTML checkbox using perl Mojolicious