繁体   English   中英

Spring集成-跨步骤共享锁

[英]Spring Integration - Sharing lock across steps

我有以下设置:许多设备通过HTTP将数据发送到我的后端,在该后端运行接收器组件的多个实例。 我需要处理数据,然后将其发送给另一个外部合作伙伴,后者需要按时间戳顺序来获取这些数据。 所以我想出了以下架构:

  1. 有n个接收器实例在运行,它们前面有一个负载平衡器,因此它们有可能从所有设备获取数据。 这些实例通过添加一些信息来处理每个传入的数据,然后将数据放入Redis Sorted Set(每个设备都有一个)。 此后,他们(通过Redis)发送一条消息,说明该集合中当前有多少个数据条目。

  2. 有m个处理实例,其任务是将数据发送到外部伙伴。 他们侦听接收方发送的消息,如果集合中的条目数大于某个阈值,则他们从队列中检索数据,添加一些其他信息,然后将其发送给外部伙伴。

我的问题是时间戳顺序要求。 我有n和m个实例,每个实例运行多个线程。 对于所有人都从接收方接收消息的处理实例,我考虑过从集中检索数据并将其发送到共享Redis锁内的外部伙伴,该Redis锁用于与消息(以及相应设备)关联的队列。 )。 但是当前有多个Spring Integration步骤是处理流程的一部分:从队列中获取数据->转换为发送数据->通过HTTP出站通道发送数据。 我考虑过要使用在第一步中获得的锁(从队列中获取数据)并在最后一步中释放(通过出站通道发送后)。 万一发生错误,该锁将在错误处理步骤中释放。

有其他替代方案的想法吗? 我正在考虑通过其余流程将锁作为消息头的一部分发送,然后在最后释放它。

由于您说的是订购,因此应该考虑使用PriorityChannelResequencer对记录进行重新排序,然后再发送给外部合作伙伴。 两者都可以使用共享MessageStore进行配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM