【问题标题】:How to dynamically change JMS queue MDB pool size in WildFly 10如何在 WildFly 10 中动态更改 JMS 队列 MDB 池大小
【发布时间】:2017-04-09 22:10:24
【问题描述】:

我正在使用带有 Artemis 作为新 JMS 提供程序的 WildFly 10.1,但我无法找到如何动态更改特定 MDB 的消费者线程数。

我有一个队列和一个消息侦听器 (MDB) 从队列中消费消息,现在我想动态控制域必须启动的最大消费者线程数。

如何使用 CLI 来实现?

【问题讨论】:

  • 请问您为什么要动态配置
  • @RémiBantos 好问题。主要原因是为 QA​​ 和生产推出新版本是一些客户变更过程中的痛苦。整个过程可能需要数周时间,它必须是手动的,并由第三方执行(不,我不是在开玩笑)。我宁愿保持微调的灵活性,这样我们就可以在不与变更部门打交道的情况下快速做出反应并完成工作。过去我在使用这种方法(使用 WebLogic 的工作管理器)方面有过很好的经验。

标签: java jms wildfly wildfly-10 activemq-artemis


【解决方案1】:

当您想为特定 MDB 执行此配置时,您可以首先将其分配给专用池。见this answer

然后要动态更新您的池属性,您可以查看this article,它描述了如何使用 jboss-cli 或standalone.xml 配置来配置或添加 ejb3 池。 (使用 JBOSS 7,但与 Wildfly 10 应该没有太大区别)

然后可以使用以下 jboss-cli 命令动态修改池大小,因为它对于 MDB 的默认值为 20:

/subsystem=ejb3/strict-max-bean-instance-pool=myPool:write-attribute(name=max-pool-size)

最后,您似乎还必须在 MDB 中相应地配置“maxSession”激活配置属性。有关上下文配置,请参阅 this threadthis question

【讨论】:

  • 我能够创建最大池为 50 的池并将其与 MDB 相关联,但是当我将 50 条消息添加到队列时,任何时候只消耗 15 条消息(以前的默认值)。我使用此命令创建池/subsystem=ejb3/strict-max-bean-instance-pool=dummyPool/:add(max-pool-size=50,timeout=5,timeout-unit=MINUTES) 并在MDB 上使用@Pool 注释甚至jboss-ejb3.xml,但服务器仍将其限制为15 个实例。 maxSession 激活是静态的。你知道它可能是什么吗?我也试过重启服务器,但没有用。
  • 我还找到了this article,但按照这些步骤并没有让我的 MDB 使用我的自定义池工作。
  • 您是否尝试过设置 maxSession 激活配置属性?有关 maxSession 上下文配置,请参阅此问题和相关答案:stackoverflow.com/questions/34030422/…
猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多