msl12
msl12

Reputation: 68

How to create RabbitMQ durable Queue by using qpid-jms-client?

I am trying to use Qpid Java client(org.apache.qpid:qpid-jms-client:0.59.0) to connect to RabbitMQ(v3.8.2). And I enable the rabbitmq_amqp1_0 plugin on RabbitMQ.

They seems working fine, but except for one thing. How could I create a durable queue by using Qpid JMS? I want to create a RabbitMQ durable queue before I consume messages from it.

As shown in the picture below, I can only create tranmsg-uplink-t5 queue and it is not durable:

I want the automatically generated tranmsg-uplink-t5 queue being durable just like the tranmsg-downlink-queue queue(it has the D feature).

This is my code:

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

Could you tell me how to make it? Thanks for all your help!

Upvotes: 1

Views: 620

Answers (1)

msl12
msl12

Reputation: 68

It seems I found the answer myself.

Use this method: javax.jms.Session.createDurableConsumer(Topic, String).

Upvotes: 1

Related Questions