首页 > 解决方案 > 当应用程序中有多个 @JmsListener 时会发生什么?(在并发方面)

问题描述

我正在尝试使用 JMS 使用来自三个 IBM MQ 队列的消息。

因此,我的 Spring Boot 应用程序中有三个 @JmsListener。

我对此表示怀疑,如果所有消费者都可以从各自的队列中消费,他们将如何表现。

提前致谢 :)

标签: springspring-bootjmsibm-mq

解决方案


在 JmsListener 注释上,您可以设置并发行为:

并发

公共抽象字符串并发

侦听器的并发限制(如果有)。覆盖由用于创建侦听器容器的容器工厂定义的值。并发限制可以是“下限”字符串——例如,“5-10”——或简单的上限字符串——例如,“10”,在这种情况下,下限将为 1。

请注意,底层容器可能支持也可能不支持所有功能。例如,它可能无法扩展,在这种情况下只使用上限。

来源:https ://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/annotation/JmsListener.html#concurrency--

每个侦听器都在自己的线程中运行。

您可以通过打印收到的消息轻松地对此进行测试。这将输出它运行的线程。例如:

2020-06-06 11:26:54.339  INFO 23404 --- [enerContainer-1] c.e.d.ShippingService                    : Hello World!

线程名称是 [enerContainer-1]

请阅读更多关于 Spring 和 JMS 的文档https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#jms-receiving


推荐阅读