我正在使用Spring Framework中的JmsTemplate
通过JMS进行集成。我想对外部系统执行同步(即阻止)调用。我读过
为此,我应该使用CorrelationID。 JMS specification说:
客户端可以使用JMSCorrelationID头字段来链接一条消息 和另外一个。通常的用途是将响应消息与其 请求消息。
因此,它明确建议将CorrelationID用于请求/回复模式。
我还发现JmsTemplate
具有sendAndReceive
方法,该方法旨在实现类似的目标。 sendAndReceive
在内部使用doSendAndReceive
,根据javadoc:
将请求消息发送到给定的目的地并阻止直到 已在即时创建的临时队列中收到回复。
现在我真的很困惑。 CorrelationID标头与ReplyTo标头有什么共同点吗?这是实现同步呼叫的两种不同方式吗?还是应该将两者一起使用?用简单的英语进行简单的说明将非常受欢迎。
答案 0 :(得分:1)
它们并没有真正的联系。如果您对每个请求使用一个临时答复队列,则不需要correlationId。如果您使用不同的请求/答复队列,则需要一些使答复与其请求相关联的东西。因此,correlationId。
Spring Integration's outbound gateway支持这两种方法并为您处理相关性(无论使用哪种技术,调用线程都会阻塞,直到收到答复为止)。