第 31 章 资源适配器
Jakarta Connectors 资源适配器使您的应用程序能够与任何消息传递提供商通信。它配置 Jakarta EE 组件(如 MDB 和其他 Jakarta Enterprise Beans,甚至 Servlets)如何发送或接收消息。
31.1. 关于集成 Artemis 资源适配器 复制链接链接已复制到粘贴板!
JBoss EAP 7 包括一个集成的 Artemis 资源适配器,它使用 pooled-connection-factory 元素来配置资源适配器的出站和入站连接。
出站连接
出站连接使用 pooled-connection-factory 元素来定义,然后由 Jakarta Enterprise Beans 和 servlets 在 Jakarta EE 部署中使用该元素将消息发送到队列或主题并接收消息。因为从连接工厂创建的连接是在应用服务器范围内创建的,所以它们可以使用类似如下的应用服务器功能:
- 连接池
- 使用应用服务器定义的安全域进行身份验证
- 使用事务管理器参与 XA 交易
这是 pooled-connection-factory 的主要区别,因为这些功能不适用于 事实。另外,请注意,通过使用 InVmConnectionFactory 或 等基本连接RemoteConnectionFactory pooled-connection-factory 定义的连接工厂,无法从外部独立 Jakarta 消息传递客户端使用 JNDI 进行查找。
入站连接
入站连接仅由消息驱动型 Bean(MDB)用于从队列或主题接收消息。MDB 是侦听队列或主题的无状态会话 Bean。它们必须实施公共 onMessage(消息) 方法,该方法在消息发送到队列或主题时调用。Artemis 资源适配器负责从队列或主题接收消息,并将它传递到 onMessage(Message 消息) 方法。为此,它会配置入站连接,定义集成 Artemis 服务器的位置和其他一些元素。
每个 MDB 会话 bean 使用来自客户端线程池的线程来消耗来自目的地的消息。如果未定义最大池大小,则将其确定为 CPU 内核处理器的八(8)倍。对于有许多 MDB 会话的系统,如测试套件,这可能会导致线程耗尽,并强制 MDB 从池中等待一个空闲的线程。您可以使用管理 CLI 增加客户端线程池的最大池大小。以下命令将最大客户端线程池大小设置为 128。
/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=128)
/subsystem=messaging-activemq:write-attribute(name=global-client-thread-pool-max-size,value=128)
有关如何配置客户端线程池大小的详情,请参考 客户端线程管理。如需有关 MDB 的更多信息,请参阅 JBoss EAP 开发 Jakarta 企业 Bean 的消息驱动 Bean。