我正在使用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/