spring - 当应用程序中有多个 @JmsListener 时会发生什么?(在并发方面)
问题描述
我正在尝试使用 JMS 使用来自三个 IBM MQ 队列的消息。
因此,我的 Spring Boot 应用程序中有三个 @JmsListener。
我对此表示怀疑,如果所有消费者都可以从各自的队列中消费,他们将如何表现。
- 会有并发吗?
- 如果不是,那么从队列中同时消费的最佳方式是什么,因为我负担不起应用程序的串行执行。
提前致谢 :)
解决方案
在 JmsListener 注释上,您可以设置并发行为:
并发
公共抽象字符串并发
侦听器的并发限制(如果有)。覆盖由用于创建侦听器容器的容器工厂定义的值。并发限制可以是“下限”字符串——例如,“5-10”——或简单的上限字符串——例如,“10”,在这种情况下,下限将为 1。
请注意,底层容器可能支持也可能不支持所有功能。例如,它可能无法扩展,在这种情况下只使用上限。
每个侦听器都在自己的线程中运行。
您可以通过打印收到的消息轻松地对此进行测试。这将输出它运行的线程。例如:
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
推荐阅读
- python-3.x - tabula.read_pdf - 错误;})"): build_options() 得到了一个意外的关键字参数“电子表格”
- c# - 用于 IEnumerable 的 AutoMapper
到 IEnumerable - java - Intellij IDEA 2019.3、JDK 11.0.3 中的 Maven java 项目:无法解析符号“java”但仍可编译
- r - 带有 csv 输入文件的多字节错误闪亮应用程序
- reactjs - 使用 React Hooks 是否会大大减少代码在 React / Redux 中的重用方式?
- arduino - 来自 ADC Arduino 的错误值 - 频率计
- python - 使用 Python 排列列表中的 +1 是什么意思?
- c# - nHibernate 因 whereNot 限制而失败,但因 where 限制而失败
- swift - 受泛型类约束的 Swift 泛型函数
- c++ - 如何打印嵌套 std::unordered_map 的内容?