我有一个Java应用程序,它使用队列中的消息。我还有一个测试客户端,它作为一个单独的Java应用程序运行,并将消息发布到该队列。
要在本地测试侦听器应用程序,我让它创建一个临时队列并侦听该队列。以下是我用于Tibco的监听器代码:
session = connection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
Queue queue;
if (useTemporaryRequestQueue) {
queue = session.createTemporaryQueue();
requestQueueName = queue.getQueueName(); // $TMP$.server.UID
} else {
queue = session.createQueue(requestQueueName);
}
receiver = session.createReceiver(queue);
receiver.setMessageListener(this);
在我的测试客户端中,我可以使用以下代码连接到Tibco请求队列:
session = connection.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
requestQueue = session.createQueue(requestQueueName); // $TMP$.server.UID
responseQueue = session.createTemporaryQueue();
当我使用Solace临时队列名称尝试此createQueue调用时,它将失败:
java.lang.IllegalArgumentException: Non-durable endpoints are not allowed as an argument to provision
at com.solacesystems.jcsmp.impl.JCSMPBasicSession.provision(JCSMPBasicSession.java:1183)
at com.solacesystems.jms.SolSession.createQueue(SolSession.java:492)
是否有另一种方法可以从我的测试客户端连接临时队列?
答案 0 :(得分:1)
您不应该在发布商中创建队列。
查看请求者创建临时队列作为RRGuaranteedRequester.java
目标的API示例中的RRGuaranteedReplier.java
和ReplyTo
,并通过将保证消息发布到该临时队列来回复
在RRGuaranteedReplier.java中:
private void sendReply(XMLMessage request, XMLMessage reply) throws Exception {
Destination replyDestination = null;
replyDestination = request.getReplyTo();
...
producer.send(reply, replyDestination);
}
在RRGuaranteedRequester.java中:
void doRequest(Destination requestDestination, Operation operation, int leftHandOperand, int rightHandOperand) throws Exception {
Queue replyQueue = session.createTemporaryQueue();
...
request.setDeliveryMode(DeliveryMode.PERSISTENT);
request.setReplyTo(replyQueue);
...
}
您可以从http://dev.solace.com/downloads/下载API中包含的全套示例。
答案 1 :(得分:0)
有一个api可以在安慰中创建临时队列,但是不会将队列名称作为参数,而是会返回临时队列名称。试试下面的示例:
Queue queue = session.createTemporaryQueue(); // create a queue like '#P2P/QTMP/v:solace/2d78591c-f465-4bac-9a20-e09c04641538'
MessageConsumer consumer = session.createConsumer(queue);
connection.start();
TextMessage testMessage = session.createTextMessage("sample message");
MessageProducer producer = session.createProducer(queue);
producer.send(testMessage);
TextMessage msg = (TextMessage)consumer.receive();
有关请求 - 响应模型的一些信息,请参阅此链接: http://dev.solace.com/get-started/jms-tutorials/request-reply_jms/
或者,您可以考虑使用临时主题从测试客户端发布,并使用固定队列来执行临时主题的通配符订阅。
http://dev.solace.com/get-started/jms-tutorials/request-reply_jms/