【问题标题】:Are Spring Integration Queue Channel MultithreadedSpring Integration Queue Channel 是多线程的吗
【发布时间】:2018-09-13 05:08:46
【问题描述】:

我试图了解多个线程是否可以同时/并行处理来自 Spring Integration Queue Channel 的消息。 假设我有以下配置:

<int:channel id="fooChannel">
   <int:queue />
 </int:channel>

从文档中,我了解到,通过使用队列通道,生产者和消费者可以解耦,并且都发生在不同的线程中。

我的困惑是 - 有没有一种方法可以让多个线程处理存储在队列通道中的消息。我们经常使用 JMS 频道做的事情。 (一个/多个生产者和多个消费者)

如果不可能实现队列通道中消息的并发处理,推荐的方法是什么

【问题讨论】:

    标签: spring multithreading spring-integration


    【解决方案1】:

    QueueChanneljava.util.Queue(默认为LinkedBlockingQueue)提供支持,该LinkedBlockingQueue 专为多线程交互而设计。

    所以,你绝对可以从不同的线程向这个频道发送消息。 另一方面也是如此:此通道与 JMS 队列完全一样:您可以有多个竞争消费者(PollingConsumer 端点),并且只有一个会轮询并处理来自队列的消息。

    【讨论】:

    • 所以不能有多个线程同时处理来自队列的多条消息?在给定时间,只有 1 个线程处理一条消息?
    • 正确。 queue 抽象的目的。其他线程可能同时处理其他消息
    • 对不起,我很困惑。当您说“其他线程可能同时处理其他消息”时,这是在单个 Queue 的上下文中吗?让我重新表述我的问题 - 可以同时处理多条消息(来自同一个队列通道)吗?即多个线程同时处理来自同一个队列的不同消息?
    • 对。这就是它的工作原理。尽管他们专门从队列中轮询消息,但每个消费者都可以与其他消费者并行处理自己的消息,这些消费者处理来自同一队列的不同消息。我不知道怎么解释你,但如果你熟悉 JMS 队列,你可以将这些概念完全应用到QueueChannel
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多