Concurrency Spring集成多个使用者不能同时处理
我正在使用Spring与ActiveMQ的集成。我定义了一个maxConcurrentConsumers=5的DefaultMessageListenerContainer。它在一个文档中引用。在一个int-xml:validating过滤器和一个int-xml:unmarshalling转换器之后,我定义了一个队列通道actionInstructionTransformed。我已经为这个队列频道准备了一个轮询器。当我启动我的应用程序时,在ActiveMQ控制台中,我可以看到在五个会话中创建了一个连接 现在,我得到了一个带有注释方法的Concurrency Spring集成多个使用者不能同时处理,concurrency,spring-integration,spring-jms,Concurrency,Spring Integration,Spring Jms,我正在使用Spring与ActiveMQ的集成。我定义了一个maxConcurrentConsumers=5的DefaultMessageListenerContainer。它在一个文档中引用。在一个int-xml:validating过滤器和一个int-xml:unmarshalling转换器之后,我定义了一个队列通道actionInstructionTransformed。我已经为这个队列频道准备了一个轮询器。当我启动我的应用程序时,在ActiveMQ控制台中,我可以看到在五个会话中创建了一
@MessageEndpoint
@ServiceActivator(inputChannel = "actionInstructionTransformed", poller = @Poller(value = "customPoller")).
我在方法入口有一份日志声明。处理每条消息的时间很长(几分钟)。在我的日志中,我可以看到thread-1
开始处理,然后我只能看到thread-1
输出。只有当thread-1
处理完1条消息后,我才能看到thread-2
开始处理下一条消息,等等。我的类中没有任何带注释的同步块@MessageEndpoint
。我没有设法同时获得线程1
、线程2
等处理消息
有人经历过类似的事情吗?看,你说:
在一个int-xml:validating过滤器和一个int-xml:unmarshalling转换器之后,我定义了一个队列通道actionInstructionTransformed
现在让我们转到队列频道
和轮询消费者
另一方面,连接到实现org.springframework.messaging.PollableChannel接口的通道(例如QueueChannel)的通道适配器将生成PollingConsumer的实例
请注意,@Poller
(PollerMetadata
)具有taskExecutor
选项
默认情况下,tasksedhuler
askQueueChannel
根据触发器
配置定期查找数据。如果这是PeriodicTrigger
,带有默认选项,如fixedRate=false
,则下一次轮询实际上发生在上一次轮询之后。这就是为什么你只看到一条线
因此,尝试配置taskExecutor
,来自该队列的消息将并行发送
DefaultMessageListenerContainer
上的并发性
无效。因为最终您会将所有这些消息放到QueueChannel
。在这里,基于@Poller
配置的新线程模型开始工作。非常感谢您的帮助。我在int:poller定义中添加了task executor=“customTaskExecutor”,现在有5个线程同时处理。