当一个应用程序中有多个@JmsListener时会发生什么? (就并发而言)

问题描述 投票:1回答:1

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

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

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

  • 会有任何并发​​吗?
  • 如果不是这样,从队列中并行消费的最佳方法是什么,因为我负担不起应用程序的串行执行。

提前感谢:)

spring spring-boot jms ibm-mq
1个回答
0
投票

在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的文档中的更多信息>

© www.soinside.com 2019 - 2024. All rights reserved.