24.6. 客户端线程管理


JBoss EAP 包括用于创建客户端连接的客户端线程池。这个池与本章前面提到的静态池分开,在 JBoss EAP 的行为类似于客户端时使用它。例如,客户端线程池客户端作为与同一集群中其他节点的群集连接创建,或者当 Artemis 资源适配器连接到集成于 JBoss EAP 远程实例的远程 Apache ActiveMQ Artemis 消息传递服务器时。还有一个用于调度的客户端线程的池。

注意

随着 JBoss EAP 7.1 的发布,客户端线程现在会在 60 秒后超时,没有活动。

使用管理 CLI 设置客户端线程池大小

使用管理 CLI 配置客户端线程池和客户端调度线程池的大小。使用管理 CLI 设置的池大小优先于使用系统属性设置的大小。

以下命令设置客户端线程池。

/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=POOL_SIZE)
Copy to Clipboard Toggle word wrap

此属性没有定义默认值。如果未定义 属性,则池的最大大小确定为 CPU 内核处理器的八(8)倍。

若要查看当前的设置,可使用以下命令:

/subsystem=messaging-activemq:read-attribute(name=global-client-thread-pool-max-size)
Copy to Clipboard Toggle word wrap

使用以下命令设置客户端计划线程池大小:

/subsystem=messaging-activemq:write-attribute(name=global-client-scheduled-thread-pool-max-size,value=POOL_SIZE)
Copy to Clipboard Toggle word wrap

以下将显示客户端计划线程池的当前池大小:默认值为 5

/subsystem=messaging-activemq:read-attribute(name=global-client-scheduled-thread-pool-max-size)
Copy to Clipboard Toggle word wrap

使用系统属性设置客户端线程池大小

以下系统属性可用于分别设置客户端的全局和全局调度线程池的大小:

  • activemq.artemis.client.global.thread.pool.max.size
  • activemq.artemis.client.global.scheduled.thread.pool.core.size

然后,可以在 XML 配置中引用系统属性,如下例所示。

注意

使用管理 CLI 设置的池大小将优先于系统属性所设置的大小。

<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
  <global-client thread-pool-max-size="${activemq.artemis.client.global.thread.pool.max.size}"
    scheduled-thread-pool-max-size="${activemq.artemis.client.global.scheduled.thread.pool.core.size}" />
  <server ...>
  </server>
  ...
</subsystem>
Copy to Clipboard Toggle word wrap

配置客户端以使用其拥有的线程池

客户端可以配置其每个 ClientSessionFactory 实例,使其不使用 JBoss EAP 提供的池,而是使用自己的客户端线程池。从该 客户端SessionFactory 创建的任何会话都将使用新创建的池。

要将 ClientSessionFactory 实例配置为使用其自己的池,请在创建工厂后立即调用适当的 setter 方法。例如:

ServerLocator locator = ActiveMQClient.createServerLocatorWithoutHA(transportConfiguration);
locator.setUseGlobalPools(true);
locator.setThreadPoolMaxSize(-1);
locator.setScheduledThreadPoolMaxSize(10);
ClientSessionFactory myFactory = locator.createSessionFactory();
Copy to Clipboard Toggle word wrap

如果使用 Jakarta Messaging API,您可以在 ClientSessionFactory 上设置相同的参数。例如:

ActiveMQConnectionFactory myConnectionFactory = ActiveMQJMSClient.createConnectionFactory(url, "ConnectionFactoryName");
myConnectionFactory.setUseGlobalPools(false);
myConnectionFactory.setScheduledThreadPoolMaxSize(10);
myConnectionFactory.setThreadPoolMaxSize(-1);
Copy to Clipboard Toggle word wrap

如果您使用 JNDI 来实例化 ActiveMQConnectionFactory 实例,您也可以使用管理 CLI 来设置这些参数,如下例所示,适用于 JBoss EAP 单机实例。

/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=use-global-pools,value=false)

/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=scheduled-thread-pool-max-size,value=10)

/subsystem=messaging-activemq/server=default/connection-factory=myConnectionFactory:write-attribute(name=thread-pool-max-size,value=1)
Copy to Clipboard Toggle word wrap

请注意,管理 CLI 将提醒您在执行上述每个命令后需要重新加载实例。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat