我试图理解多个线程是否可以并发/并行来自Spring集成队列通道的消息。假设我有以下配置:
<int:channel id="fooChannel">
<int:queue />
</int:channel>
如果无法实现队列通道中消息的并发处理,建议采用什么方法
QueueChannel
由java.util.Queue
(默认为LinkedBlockingQueue
)支持,它是为多线程交互而设计的。
因此,您绝对可以从不同的线程向该通道发送消息。另一方面,这也是正确的:这个通道完全像JMS队列那样工作:您可以有几个竞争的消费者(pollingconsumer
endpoint),并且只有其中一个将轮询和处理来自队列的消息。
我刚刚阅读了RabbitMQ的Java API文档,发现它非常丰富而且简单。关于如何为发布/消费设置一个简单的的示例非常容易遵循和理解。但这是一个非常简单/基本的示例,它给我留下了一个重要的问题:如何设置1+来向多个队列发布/消费? 假设我有一个RabbitMQ服务器,上面有3个队列:、和。因此,我们需要一个来发布/使用所有3个队列,或者更有可能有3个单独的,每个通道专用于一个队列。 在此基础上,
问题内容: 我想找到一个队列结构(数据容器),其元素必须是先进先出的。对我而言,重要的是该结构必须是线程安全的。我将使用此数据容器作为任务或连接池之类的东西。 我知道缓冲通道是线程安全的,但是我想知道它是否可以作为FIFO使用,特别是在并发情况下。 并且如果可以将缓冲通道用作线程安全队列,我是否需要担心其效率? 问题答案: 我很确定Channels是FIFO。它们也很便宜,因此它们将提高内存效率。
我的应用程序有多个线程将消息发布到单个RabbitMQ集群。 阅读rabbit文档:我阅读了以下内容: 对于使用多个线程/进程进行处理的应用程序,每一个线程/进程打开一个新通道,并且不在它们之间共享通道是非常常见的。 而且我明白,与其开通多个连接(昂贵) 不如开通多个通道。 但是为什么不对所有线程使用单个通道呢? 在单个通道上使用多个通道有什么好处?
问题内容: 是否有这样的Java类: 可以通过ID添加可执行任务,其中保证所有具有相同ID的任务都不会同时运行 线程数可以限制为固定数量 Map的幼稚解决方案很容易解决(1),但难以管理(2)。同样,我所知道的所有线程池类都将从单个队列中提取,这意味着不能保证(1)。 欢迎使用涉及外部库的解决方案。 问题答案: 如果找不到开箱即用的东西,那么推出自己的产品就不难了。您可以做的一件事是将每个任务包装
问题 你有一个线程队列集合,想为到来的元素轮询它们, 就跟你为一个客户端请求去轮询一个网络连接集合的方式一样。 解决方案 对于轮询问题的一个常见解决方案中有个很少有人知道的技巧,包含了一个隐藏的回路网络连接。 本质上讲其思想就是:对于每个你想要轮询的队列,你创建一对连接的套接字。 然后你在其中一个套接字上面编写代码来标识存在的数据, 另外一个套接字被传给 select() 或类似的一个轮询数据到达
如果队列已满,ArrayBlockingQueue将阻止生产者线程;如果队列为空,ArrayBlockingQueue将阻止消费者线程。 这种阻塞的概念是否与多线程的思想背道而驰?如果我有一个“主”线程,并假设我想将所有“日志记录”活动委托给另一个线程。因此,基本上在我的主线程内,我创建了一个Runnable来记录输出,并将其放在ArrayBlockingQueue上。这样做的全部目的是让“主”线