当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring AMQP从RabbitMQ接收相关ID的消息

韦修文
2023-03-14

我浏览了RabbitTemplate的API。它只提供从队列中获取消息的receive方法。但是,无法获得具有特定关联ID的消息。你能帮我理解一下我在这里错过了什么吗。

目前,我正在使用ActiveMQ的JMS API接收消息,使用以下代码创建带有消息选择器的Consumer。希望对Spring AMQP和RabbitMQ执行同样的操作:

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;
} 

共有1个答案

董新觉
2023-03-14

您正在JMS中使用messageSelector字符串;RabbitMQ/AMQP没有等效的。

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

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

 类似资料:
  • 主要内容:一、前情回顾,二、业务场景介绍,三、初步落地一、前情回顾 之前给大家聊了一下,面试时如果遇到消息中间件这个话题,面试官上来可能问的两个问题: 你们的系统架构中为什么要引入消息中间件? 系统架构中引入消息中间件有什么缺点? 关于这两个问题的回答,可以参见之前的两篇文章: 《 为什么要使用MQ消息中间件?这几个问题必须拿下!》 《 用了MQ消息中间件后,我开始后悔了...》 在问完这两个问题之后,不同风格的面试官可能会展开不同的发问。 针对那种

  • 我运行生产者,它生成N条消息,我在仪表板上看到它们。当我运行接收器时,它会接收来自队列的所有消息,并且队列为空。 我需要有多个生产者生成消息到同一个队列。多个客户从队列中接收消息。消息将被队列TTL删除。但是现在第一个接收者从队列中获取所有消息。我怎么能做到这一点?

  • 本文向大家介绍Python如何使用RabbitMQ的消息,包括了Python如何使用RabbitMQ的消息的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 使用消息时,我们首先需要定义一个函数来处理传入的消息。这可以是任何可调用的函数,并且必须采用一个消息对象或一个消息元组(取决于中to_tuple定义的参数start_consuming)。 除了处理传入消息中的数据外,我们还必须确

  • RabbitMQ的大部分文档似乎都集中在循环(round-robin)上,即单个消息由单个消费者使用。我有一个需求,其中希望从一个队列接收到多个订阅的消费者的相同消息。 下面是我的示例消费者代码。这里有两个侦听器在侦听同一个队列,但是只有一个使用者接收到消息。如何配置它,以便将相同的消息传递给两个消费者?(Consumer1和Consumer2)。任何帮助都将得到高度赞赏。

  • 我试图通过社交网络从亚马逊SES获得电子邮件回复(退回、投诉和交付)。在亚马逊SQS控制台上,我看到消息已经在队列中,所以我确信亚马逊上的结构设置是正确的。 然后,使用Laravel 5.5,按照官方指南,我设置了一个队列来听SQS。我跳过了将作业分配到队列的部分,因为这将由SNS完成。为了简单起见,在作业处理程序中,我只需要转储我收到的内容。作业如下所示: 其配置如下所示: 为安全起见,实际值隐

  • 一、 我与CachingConnectionFactory有一个SpringAMQP项目。我需要从AMQP连接获取一些属性,例如:状态、连接时间、通道和一些运行时度量。CachingConnectionFactory是否有任何指标支持(例如:https://www.rabbitmq.com/blog/2016/11/30/metrics-support-in-rabbitmq-java-clien