Spring Integration发送消息,直到触发自定义事件

时间:2018-11-07 15:32:17

标签: spring-integration

我不会将某些数据发送到具有专有通信协议的外部软件。

那是抽象的工作流程。

发送应用程序事件

  1. 发送消息
  2. 等待ACK消息
  3. 处理ACK(通过返回码报告消息中是否有错误 在ACK中)
  4. 发送下一条消息

处理ACK

  1. 处理ACK
  2. 报告
  3. 发送ACK接收事件以取消阻止发件人,以便下一封邮件可以 被发送

那么,哪个端点或通道是用于此目的的合适对象?

SI - FLOW

1 个答案:

答案 0 :(得分:0)

当您尝试向外部服务发送消息时,重试是出站通道适配器的一部分。请参阅RequestHandlerRetryAdvice以及如何在Reference Manual中进行配置。

对于等待确认的任务,我建议使用一个聚合器,其中包含MessageCountReleaseStrategy(2)和一些CorrelationStrategy,可以对请求进行分组并对其进行确认。因此,这样,在ack到达之前,您将不会离开聚合器。

此聚合器应作为PublishSubscribeChannel的第二个订阅者,第一个订阅者将是您的出站通道适配器,用于将请求发送到外部系统。

现在把戏。

要阻止发件人直到ack到达,您需要将呼叫包装到@MessagingGateway,并且答案(答复)应来自该聚合器。

我建议也将网关的replyChannel设置为PublishSubscribeChannel。这样,第二个订阅者将成为您的服务激活者,以处理聚合器中已发布组的确认。同时,第一个订阅者是每个人等待回复的网关。

在回复上一封邮件之前,呼叫过程将无法发送下一封邮件。

我知道这很复杂,但是由于您的要求太高,您需要阻止发送。