我正在使用Spring Framework中的JmsTemplate通过JMS进行集成。我想对外部系统执行同步(即阻止)调用。我读过
为了做到这一点,我应该使用CorrelationID。 JMS specification说:


  客户端可以使用JMSCorrelationID头字段来链接一条消息
  和另外一个。通常的用途是将响应消息与其
  请求消息。


因此,它明确建议将CorrelationID用于请求/回复模式。

我还发现JmsTemplate具有旨在实现相似目标的sendAndReceive方法。 sendAndReceive在内部使用doSendAndReceive,根据javadoc


  发送请求消息到给定的目的地并阻止直到
  已在动态创建的临时队列中收到回复。


现在我真的很困惑。 CorrelationID标头与ReplyTo标头有什么共同点吗?这是实现同步呼叫的两种不同方式吗?还是应该将两者一起使用?用简单的英语进行简单的说明将非常受欢迎。

最佳答案

它们并没有真正的关系。如果对每个请求使用一个临时答复队列,则不需要correlationId。如果您使用不同的请求/答复队列,则需要一些使答复与其请求相关联的东西。因此,correlationId。

Spring Integration's outbound gateway支持这两种方法并为您处理相关性(无论使用哪种技术,调用线程都会阻塞,直到收到答复为止)。

关于java - JMS-CorrelationID与ReplyTo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56473137/

10-09 05:19