Reputation: 68
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
Reputation: 68
It seems I found the answer myself.
Use this method: javax.jms.Session.createDurableConsumer(Topic, String)
.
Upvotes: 1