如何使用Spring AMQP添加额外的侦听器来侦听队列?

时间:2015-03-20 09:13:17

标签: java spring rabbitmq spring-amqp

我目前有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;
    }
}

2 个答案:

答案 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 newblog announcement

答案 1 :(得分:1)

将相同的队列用于我认为不是最佳选择的不同消息。

您可以使用两个路由密钥进行一次交换,使用两个队列进行不同的绑定。另一种方式是使用包装,正如加里拉塞尔所说,但铸件不具备良好的性能,而且这种解决方案不是很好的#34;单一责任原则"。

问候。