5

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

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

ReqChannel 连接到路由器,将传入消息路由到某些服务激活器之一,比如 AServiceActivator 和 BServiceActivator,并且服务激活器具有配置的 output-channel="RepChannel"。

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

4

1 回答 1

7

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

如果最终消费者(比如服务激活器)没有输出通道,框架会自动将回复发送到回复通道标头。

出于这个原因,通常不需要在网关上声明一个回复通道以供最终消费者发送。

但是,有时这很有用 - 例如,如果您想窃听回复通道,或将其设为发布-订阅通道,因此结果会发送到多个地方。

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

因此,在您的流程中保留 replyChannel 标头至关重要。您不能向回复通道发送任意回复,除非您包含原始消息的回复通道标头。

于 2012-07-28T12:47:38.757 回答