我目前有FooListener
侦听包含Foo
条消息的队列。如何添加另一个BarListener
类来收听Bar
消息的同一队列?
我的RabbitMQ目前配置如下:
@Configuration
public class RabbitMQConfig {
@Bean
public MessageListenerContainer messageListenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueues(workQueue());
container.setMessageListener(new MessageListenerAdapter(fooListener(), new JsonMessageConverter()));
container.setDefaultRequeueRejected(false);
return container;
}
}
答案 0 :(得分:2)
目前没有内置支持根据有效负载类型路由到不同的侦听器。
您可以编写一个简单的侦听器包装器...
public void handleMessage(Object payload) {
if (payload instanceof Foo) {
this.fooListener.handleMessage((Foo) payload);
}
else if (payload instanceof Bar) {
this.barListener.handleMessage((Bar) payload);
}
else {
// unexpected payload type
}
}
修改强>
Spring AMQP 1.5(目前在里程碑1 - 1.5.0.M1)现在支持此功能;请参阅what's new和blog announcement。
答案 1 :(得分:1)
将相同的队列用于我认为不是最佳选择的不同消息。
您可以使用两个路由密钥进行一次交换,使用两个队列进行不同的绑定。另一种方式是使用包装,正如加里拉塞尔所说,但铸件不具备良好的性能,而且这种解决方案不是很好的#34;单一责任原则"。
问候。