如何使用Spring AMQP从RabbitMQ接收消息

我浏览了RabbitTemplate的API。 它只提供从队列中获取消息的接收方法。 但是,无法通过特定的相关ID获取消息。 你能帮我理解我在这里错过了什么吗?

目前,我使用ActiveMQ的JMS API来使用以下代码来接收消息,其中createConsumer带有消息选择器。 使用RabbitMQ与Spring AMQP一样:

private ObjectMessage receiveMessage(final String readQueue, final UUID correlationId, final boolean isBroadcastMessage, final int readTimeout) throws JMSException
{
    final ActiveMQConnectionFactory connectionFactory = this.findConnectionFactory(readQueue);
    Connection connection = null;
    Session session = null;
    MessageConsumer consumer = null;
    ObjectMessage responseMessage = null;

    try
    {
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        Destination destination = session.createQueue(readQueue);

        consumer = session.createConsumer(destination, "correlationId = '" + correlationId + "'");
        final Message message = consumer.receive(readTimeout);
    }
    finally
    {
        if (consumer != null)
        {
            consumer.close();
        }
        if (session != null)
        {
            session.close();
        }
        if (connection != null)
        {
            connection.close();
        }
    }
    return responseMessage;
} 

您在JMS中使用messageSelector字符串; RabbitMQ / AMQP没有等同物。

相反,每个消费者都有自己的队列,并且在代理中使用直接或主题交换来执行路由。 我建议你看一下rabbitmq网站上的教程和主题。

如果您使用correlationId进行请求/回复处理,请考虑使用模板中内置的sendAndReceiveconvertSendAndReceive方法。 有关更多信息,请参阅参考文档。

链接地址: http://www.djcxy.com/p/59647.html

上一篇: How to receive messages for a correlationid from RabbitMQ using Spring AMQP

下一篇: purge rabbitmq queue using spring amqp template?