Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring集成-跨步骤共享锁_Java_Spring_Multithreading_Locking_Spring Integration - Fatal编程技术网

Java Spring集成-跨步骤共享锁

Java Spring集成-跨步骤共享锁,java,spring,multithreading,locking,spring-integration,Java,Spring,Multithreading,Locking,Spring Integration,我有以下设置:许多设备通过HTTP将数据发送到我的后端,在那里一个接收器组件正在运行多个实例。我需要处理数据,然后将其发送给另一个外部合作伙伴,后者需要按时间戳顺序发送此数据。因此,我提出了以下架构: 有n个接收器实例正在运行,前面有一个负载平衡器,因此它们可以从所有设备中获取数据。这些实例通过添加一些信息来处理每个传入数据,然后将数据放入Redis排序集(每个设备有一个)。在此之后,他们会发送一条消息(通过Redis),告知集合中当前有多少数据项 有m个处理实例的任务是将数据发送给外部合作伙伴

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

  • 有n个接收器实例正在运行,前面有一个负载平衡器,因此它们可以从所有设备中获取数据。这些实例通过添加一些信息来处理每个传入数据,然后将数据放入Redis排序集(每个设备有一个)。在此之后,他们会发送一条消息(通过Redis),告知集合中当前有多少数据项

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

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


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

    < P>既然你说到排序,你应该考虑在发送给外部伙伴之前使用或重新排序记录。
    它们都可以被配置为共享<代码> MessageStore < /代码> .

    ,因为你说关于排序,在发送给外部伙伴之前,你应该考虑使用或重新排序记录。 它们都可以配置共享的
    消息存储