我有以下设置:许多设备通过HTTP将数据发送到我的后端,其中多个实例正在运行接收器组件。我需要处理数据,然后将其发送给另一个外部合作伙伴,他们需要按时间戳顺序排列这些数据。所以我提出了以下架构:
有n个接收器实例正在运行,前面有一个负载均衡器,因此它们从所有设备中获取数据。这些实例通过添加一些信息处理每个传入数据,然后将数据放入Redis排序集(每个设备有一个)。在此之后,他们发送一条消息(通过Redis),了解该集合中当前有多少数据条目。
有m个处理实例,其任务是将数据发送给外部合作伙伴。它们侦听接收方发送的消息,如果集合中的条目数大于某个阈值,它们将从队列中检索数据,添加一些其他信息,然后将其发送给外部伙伴。
< / LI> 醇>我遇到的问题是时间戳订单要求。我有n和m个实例,每个实例都运行多个线程。对于所有接收来自接收方的消息的处理实例,我考虑从集合中检索数据并将其发送到共享Redis锁内的外部伙伴,以获取与消息相关联的队列(以及相应的设备) )。但是目前有多个Spring Integration步骤是处理流程的一部分:从队列中获取数据 - &gt;将其转换为发送 - &gt;通过HTTP出站通道发送。我想过使用在第一步中获得的锁(从队列中获取数据)并在最后一步中释放(在通过出站通道发送之后)。如果出现错误,将在错误处理步骤中释放锁定。
有没有替代方案的想法?我正在考虑通过剩余的流程将锁作为消息头的一部分发送,然后在最后释放它。
答案 0 :(得分:0)
由于您说的是订购,因此在发送给外部合作伙伴之前,您应该考虑使用PriorityChannel或Resequencer重新排序记录。
可以使用共享MessageStore
配置它们。