如何使用 qpid-jms-client 创建 RabbitMQ 持久队列?

Posted

技术标签:

【中文标题】如何使用 qpid-jms-client 创建 RabbitMQ 持久队列?【英文标题】:How to create RabbitMQ durable Queue by using qpid-jms-client? 【发布时间】:2022-01-20 01:37:27 【问题描述】:

我正在尝试使用 Qpid Java 客户端(org.apache.qpid:qpid-jms-client:0.59.0) 连接到 RabbitMQ(v3.8.2)。我在 RabbitMQ 上启用了 rabbitmq_amqp1_0 插件。

他们似乎工作正常,但除了一件事。如何使用 Qpid JMS 创建 durable 队列?我想在消费消息之前创建一个 RabbitMQ durable 队列。

如下图,我只能创建tranmsg-uplink-t5队列,不是durable

我希望自动生成的 tranmsg-uplink-t5 队列像 tranmsg-downlink-queue 队列一样durable(它具有D 特征)。

这是我的代码:

import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.JmsQueue;

public class ReceiverClient 
  public static void main(String[] args) 
    try 

      ConnectionFactory factory = new JmsConnectionFactory(
          "guest",
          "guest",
          "amqp://127.0.0.1:5672?jms.requestTimeout=2000&jms.sendTimeout=1000");

      Queue queue = new JmsQueue("tranmsg-uplink-t5");

      Connection connection = factory.createConnection();
      connection.start();

      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

      MessageConsumer consumer = session.createConsumer(queue);

      Message message = consumer.receive(20000);
      if (message != null) 
        System.out.print(
            "receive a message: ");

        if (message instanceof BytesMessage)
          BytesMessage bytesMessage = (BytesMessage) message;

          byte[] b = new byte[(int) bytesMessage.getBodyLength()];
          bytesMessage.readBytes(b);

          System.out.println(new String(b));
         else 
          TextMessage textMessage = (TextMessage) message;
          System.out.println(textMessage.getText());
        
      

      connection.close();
     catch (Exception ex) 
      System.out.println("[CLIENT] Caught exception, exiting");
      ex.printStackTrace(System.out);
      System.exit(-1);
    
  

你能告诉我怎么做吗?感谢您的所有帮助!

【问题讨论】:

【参考方案1】:

看来我自己找到了答案。

使用这个方法:javax.jms.Session.createDurableConsumer(Topic, String)

【讨论】:

以上是关于如何使用 qpid-jms-client 创建 RabbitMQ 持久队列?的主要内容,如果未能解决你的问题,请参考以下文章

R:如何使用 ggplot2 创建一个半色半数的热图?

如何绘制从使用 R 中的“caret”包创建的随机森林中选择的树

如何使用 R 中指定的列名创建空数据框? [复制]

数据仓库 - 如何使用 R 和/或 SQL 创建一个与所有维度相交的事实表

如何创建R包并将其发布在 CRAN / GitHub 上--转载

R-Shiny:如何显示使用 saveHTML() 函数创建的动画和控件?