我的客户端应用程序有很多实例。这些客户端通过消息传递向服务器应用程序发送请求并接收回复。通常会使用临时队列发送回复。
不幸的是,我必须使用没有临时队列或主题概念的 Stomp 协议(protocol)。 (虽然消息代理有)
确保只有原始请求者收到回复的最佳方法是什么?对于这种不幸的情况,是否有任何最佳做法?
最佳答案
当多个请求者在同一个队列上监听回复时,通常的解决方案是使用相关 ID 来选择消息。在客户端,它看起来像这样:
- 将消息放入请求队列并提交。
- 从出站消息中检索 JMSMessageID(该值由代理确定并根据发送结果更新消息对象)。
- 从回复队列中接收一条消息,将出站消息中的 JMSMessageID 指定为选择器中的相关 ID。
- 处理并提交。
在服务器端它看起来像这样:
- 在同步点下接收消息。
- 处理请求并准备响应。
- 在对来自请求的 JMSMessageID 值的响应上设置 JMSCorrelationID。
- 发送消息。
- promise 。
消费者会像这样设置选择器:activemq.selector:JMSCorrelationID=
。
由于代理创建的消息 ID 应该是全局唯一的,因此将其用作相关 ID 的模式可以防止在允许每个请求者指定其自己的值时可能发生的冲突。
关于jms - 如果没有可用的临时队列,实现请求/回复模式的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849964/