Java Springs集成&x27;s回复关联过程详细信息

Java Springs集成&x27;s回复关联过程详细信息,java,spring-integration,Java,Spring Integration,我找不到使用网关和服务激活器进行回复处理的文档 如果我有网关: 1) 将请求发送到通道ReqChannel 2) 接受频道RepChannel上的回复 ReqChannel连接到路由器,路由器将传入消息路由到某些服务激活器之一,比如说AServiceActivator和BServiceActivator,并且服务激活器具有配置的输出通道=“RepChannel” 如果我异步或同时从不同线程在网关的接口上执行多个方法调用,网关将如何将传入的应答与实际的服务调用方关联?网关将创建一个临时应答通道,并

我找不到使用网关和服务激活器进行回复处理的文档

如果我有网关: 1) 将请求发送到通道ReqChannel 2) 接受频道RepChannel上的回复

ReqChannel连接到路由器,路由器将传入消息路由到某些服务激活器之一,比如说AServiceActivator和BServiceActivator,并且服务激活器具有配置的输出通道=“RepChannel”


如果我异步或同时从不同线程在网关的接口上执行多个方法调用,网关将如何将传入的应答与实际的服务调用方关联?

网关将创建一个临时应答通道,并将其放在消息头中。这种机制提供了必要的相关性,因为每条消息都有自己的回复通道

如果最终使用者(比如服务激活器)没有输出通道,框架会自动将应答发送到replyChannel头

因此,通常不需要在网关上声明回复通道,以便最终使用者发送到

但是,有时这是有用的—例如,如果您想有线点击回复频道,或者将其设置为发布-订阅频道,那么结果会传到多个地方

在这种情况下(当网关上有一个应答通道,并且最终消费者在那里发送消息时),框架只是将显式声明的应答通道桥接到消息头中的临时应答通道


因此,在流中保留replyChannel头是至关重要的。除非包含原始消息的replyChannel标头,否则无法向回复频道发送任意回复。

ReqChannel上的路由器和service activator都将在其输出上保留回复频道标头值,这是否正确?这个值将在网关中检查是否与实际调用者存在应答相关性?是的,所有端点通常保留所有标题(将输入标题复制到输出)。一个例外是自定义转换器,它返回一条消息作为其结果;在这种情况下,由自定义转换器代码来复制头。对于其他组件(包括POJO转换器),输入头总是复制到输出消息,因此应答头在下游可用。