Concurrency Spring集成多个使用者不能同时处理

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控制台中,我可以看到在五个会话中创建了一

我正在使用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
ask
QueueChannel
根据
触发器
配置定期查找数据。如果这是
PeriodicTrigger
,带有默认选项,如
fixedRate=false
,则下一次轮询实际上发生在上一次轮询之后。这就是为什么你只看到一条线

因此,尝试配置
taskExecutor
,来自该队列的消息将并行发送


DefaultMessageListenerContainer
上的
并发性
无效。因为最终您会将所有这些消息放到
QueueChannel
。在这里,基于
@Poller
配置的新线程模型开始工作。

非常感谢您的帮助。我在int:poller定义中添加了task executor=“customTaskExecutor”,现在有5个线程同时处理。