【问题标题】:How to create RabbitMQ durable Queue by using qpid-jms-client?如何使用 qpid-jms-client 创建 RabbitMQ 持久队列?
【发布时间】: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);
    }
  }
}

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

【问题讨论】:

    标签: rabbitmq amqp qpid


    【解决方案1】:

    看来我自己找到了答案。

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

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 2016-05-18
      • 2018-03-30
      • 2019-12-14
      • 2015-04-12
      相关资源
      最近更新 更多