如何发布到在另一个进程中创建的安慰临时队列

时间:2017-06-23 15:07:05

标签: java solace

我有一个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)

是否有另一种方法可以从我的测试客户端连接临时队列?

2 个答案:

答案 0 :(得分:1)

您不应该在发布商中创建队列。

查看请求者创建临时队列作为RRGuaranteedRequester.java目标的API示例中的RRGuaranteedReplier.javaReplyTo,并通过将保证消息发布到该临时队列来回复

在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/