0

我在我们的项目中引入了 spring 集成而不是遗留集成架构。此架构支持发件人和收件人。每个发件人可以配置 3 个目的地。

  1. 主要数据流,消息应该传递到的地方。可以是文件系统、jms、邮件等
  2. 备用流量。将每个收到的消息存储到备份目的地。通常它是文件附加程序,每条消息都存储在文件末尾。那也可以是jms队列。如果整个系统发生故障和数据丢失,备份让我们有机会获取消息并重播
  3. 流失败。如果我们无法将消息发送到目的地(无连接,格式化创建消息失败),则将消息放入此队列。

Spring 集成网关看起来很合适。我可以将默认请求通道用于主流,将错误通道用于失败流。备份流的问题。如何复制网关传入消息并将其放置到备份通道?

PS这里更准确地说是一个测试和代码。

https://github.com/semenodm/Coding-Exercises/tree/master/spring-integration/spring-integration/src

测试i_want_my_sender_put_message_into_fail_queue_when_sending_failed失败,因为 Wire Tap 将始终将消息放入其队列,无论主流是否成功。

我不想添加自定义拦截器来处理这个逻辑并使用配置来处理这个问题。

4

2 回答 2

0

如果您将两个适配器订阅到直接通道,没有负载平衡并在每个订阅者上设置一个 order 属性,则如果第一个适配器引发异常,框架将自动故障转移到第二个适配器。

<int:channel id="foo>
    <int:dispatcher load-balancer="none" />
</int:channel>

<... id="primary" order="1" .../>

<... id="secondary" order="2" .../>

默认负载均衡器是循环的。

另一种选择是在即将发布的 2.2 版本中使用新的 ExpressionEvaluatingMessageHandlerAdvice ...

http://blog.springsource.org/2012/10/09/spring-integration-2-2-retry-and-more/

于 2012-11-09T17:01:26.277 回答
0

您可能需要考虑添加发送到“backupChannel”的 Wire Tap。

请参阅:http ://static.springsource.org/spring-integration/docs/2.1.x/reference/htmlsingle/#channel-wiretap

于 2012-11-09T16:19:28.600 回答