【问题标题】:Parallel ordered processing of spring integration eventsspring集成事件的并行有序处理
【发布时间】:2020-06-22 14:36:07
【问题描述】:

我对集成框架很陌生。我有一个弹簧消息监听器,它接收股票更新(S1、S2、S3 ...)。同一股票的更新需要按顺序处理,而不同股票的更新应该并行处理。

例如如果更新顺序是 S1-1, S1-2, S2-1, S1-3, S3-1, S2-2, S1-3, S3-2 .. 那么应该有三个并行处理流

S1-1、S1-2、S1-3

S2-1,S2-1

S3-1、S3-2

请注意,这样的股票可能有数千只。

目前我正在使用通道上的执行程序并行处理所有内容。我怎样才能达到我的要求。请指教。谢谢。

【问题讨论】:

  • 感谢您的回复。是的,我正在尝试按顺序处理对一只股票的更新。拥有与股票一样多的线程是不切实际的。我的想法更像是一个线程池,如果有一个线程已经在处理库存,请将其排队等待同一个线程。从线程池中选择一个新线程,前提是它是不同的库存。

标签: spring-integration


【解决方案1】:

好吧,既然我们不能并行“数千个这样的股票”,因为生成这么多线程真的效率很低,所以我会为每个线程进行分区和排队通道之类的事情。

路由器组件可以根据请求消息决定它属于哪个分区并发送到相应的队列通道。

这样,该队列通道上的轮询器将按顺序提取消息,但将并行处理不同的队列。

在文档中查看更多信息:

https://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#router

https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-implementations-queuechannel

【讨论】:

  • 感谢您的回复。这是否意味着创建与库存一样多的队列。另外,一只股票每天只能更新一次,我会为它安排一个专门的队列。无论如何都要用线程池逻辑来做,比如如果有一个线程已经在处理库存,请将它排队等待同一个线程。从线程池中选择一个新线程,前提是它是不同的库存。再次感谢
  • 我们无法控制执行器中的线程边界。这只是我们无法控制的。为此,我们需要使用更高级的组件,例如MessageChannel。正如我所说:您需要查看partitioning 抽象。我的意思是你的路由器功能应该决定当前消息应该发送到哪个通道。只有这样我们才能保证具有相同分区的消息被并行处理。您绝对不需要为每只股票生成队列通道 - 只需一组。
猜你喜欢
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多