jms - 如果没有可用的临时队列,实现请求/回复模式的最佳方式是什么?

标签 jms messaging enterprise-integration

我的客户端应用程序有很多实例。这些客户端通过消息传递向服务器应用程序发送请求并接收回复。通常会使用临时队列发送回复。

不幸的是,我必须使用没有临时队列或主题概念的 Stomp 协议(protocol)。 (虽然消息代理有)

确保只有原始请求者收到回复的最佳方法是什么?对于这种不幸的情况,是否有任何最佳做法?

最佳答案

当多个请求者在同一个队列上监听回复时,通常的解决方案是使用相关 ID 来选择消息。在客户端,它看起来像这样:

  1. 将消息放入请求队列并提交。
  2. 从出站消息中检索 JMSMessageID(该值由代理确定并根据发送结果更新消息对象)。
  3. 从回复队列中接收一条消息,将出站消息中的 JMSMessageID 指定为选择器中的相关 ID。
  4. 处理并提交。

在服务器端它看起来像这样:

  1. 在同步点下接收消息。
  2. 处理请求并准备响应。
  3. 在对来自请求的 JMSMessageID 值的响应上设置 JMSCorrelationID。
  4. 发送消息。
  5. promise 。

消费者会像这样设置选择器:activemq.selector:JMSCorrelationID=

由于代理创建的消息 ID 应该是全局唯一的,因此将其用作相关 ID 的模式可以防止在允许每个请求者指定其自己的值时可能发生的冲突。

关于jms - 如果没有可用的临时队列,实现请求/回复模式的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849964/

相关文章:

java - 当我使用多个消费者时同步接收消息

java - Camel JMS 事务处理不起作用

JMS/MDB 回滚

java - Bitronix 事务无法与 JMS 队列一起使用

objective-c - 有没有一种重复性较低的方法可以将 Action 消息转发给另一个对象?

java - Apache Camel 将所有请求 header 复制到响应

javascript - 如何使用 twilio-csharp 库发送 IP 消息

go - 如何让 ZeroMQ 使出站排队但未在设定时间内发送的消息超时?

c# - 用于流数据的 CQRS

java - EIP/Apache Camel - 如何同时处理消息,但按组原子处理?