JMS-CorrelationID与ReplyTo

时间:2019-06-06 07:53:04

标签: java spring jms spring-integration

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

  

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

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

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

  

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

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

1 个答案:

答案 0 :(得分:1)

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

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