我有一个 Web 应用程序,预计将从外部应用程序获取和显示数据,该外部应用程序只能通过消息传递 (JMS) 访问。
因此,如果用户在浏览器上提交请求,则同一 HTTP 请求线程将必须与消息系统(MQ 系列)交互,以便同一请求线程可以显示从消息系统接收的数据。
我可以在这里使用一种模式吗?我在网上看到一些模糊的参考资料,以这种方式使用“Correlation ID”:
Msg m = new TextMsg("findDataXYZ");
String cr_id = m.setCorrelationID(id);
sendQueue.send(m).
// now start listening to the Queue for a msg that bears that specific cr_id
Response r = receiverQueue.receive(cr_id);
那里有更好的东西吗?我发现的其他模式期望异步接收响应......这对我来说不是一个选项,因为我必须在同一个 HTTP 请求上发送回响应。
请求/回复消息传递模式对于您的要求很有用。您通常使用 CorrelationId 来关联请求和回复消息。
发送请求消息时,您在消息上设置 JMSReplyTo 目标。通常,临时队列用作 JMSReplyTo 目的地。创建消费者来接收响应时,使用带有 JMSCorrelationId 的选择器,例如
cons = session.createConsumer(tempDestination,"JMSCorrelationId="+requestMsg.JMSMessageId);
在另一端,处理请求消息的应用程序必须使用 JMSReplyTo 目标来发送响应。它还必须使用请求消息的 MessageId 并将其设置为响应消息的 CorrelationId。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)