31.3. 配置 Artemis 资源适配器以连接到红帽 AMQ
您可以配置集成的 Artemis 资源适配器,以连接到 Red Hat AMQ 7 的远程安装,然后成为 JBoss EAP 7.3 应用的 JMS 供应商。这使得 JBoss EAP 能够成为远程红帽 AMQ 7 服务器的客户端。
如果需要支持其他消息传递协议,如 AMQP 或 STOMP,您必须将 Red Hat AMQ 7 配置为您的消息传递代理。然后,JBoss EAP 服务器中集成的 Artemis 资源适配器可用于处理已部署应用的消息。
集成资源适配器的限制
队列和主题的动态创建
请注意,集成在 JBoss EAP 7.3 中的 Artemis 资源适配器不支持在红帽 AMQ 7 代理中动态创建队列和主题。您必须直接在远程 Red Hat AMQ 7 服务器上配置所有队列和主题目的地。
创建连接事实
尽管红帽 AMQ 允许同时使用 pooled-connection-factory 和 配置连接工厂,但每个连接工厂的创建方式会有差别。使用 external- contextexternal-context 创建连接工厂时,它会创建 JMS 规范中定义的简单 JMS 连接工厂。新创建的连接工厂等同于 RemoteConnectionFactory,它在 messaging-activemq 子系统中默认定义。此连接工厂独立于应用服务器中的其他组件,这意味着它不知道并且无法使用其他组件,如交易管理器或安全管理器。因此,只有 pooled-connection-factory 可用于在 JBoss EAP 7 中创建连接工厂。external-context 只能用于将已在远程 AMQ 7 代理上的 JMS 目的地注册到 JBoss EAP 7 服务器的 JNDI 树中,以便本地部署可以查找或注入它们。
通过配置 external-context 或 元素所创建的连接工厂无法用于连接到远程 AMQ 7 代理,因为它们不使用 Artemis 资源适配器。在连接远程 AMQ7 代理时,仅支持配置 connection- factorypooled-connection-factory 元素所创建的连接工厂。
配置 JBoss EAP 以使用远程红帽 AMQ 服务器
您可以按照以下步骤使用管理 CLI 将 JBoss EAP 配置为使用 Red Hat AMQ 7 的远程安装作为消息传递提供程序:
在 Red Hat AMQ 7
broker.xml部署描述符文件中配置队列。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意JBoss EAP 随附的 Artemis 资源适配器使用 ActiveMQ Artemis JMS 客户端 2.x。此客户端需要地址上的
anycastPrefix和多播Prefix前缀。它还预期队列名称与地址名称相同。创建远程连接器。
/subsystem=messaging-activemq/remote-connector=netty-remote-throughput:add(socket-binding=messaging-remote-throughput)
/subsystem=messaging-activemq/remote-connector=netty-remote-throughput:add(socket-binding=messaging-remote-throughput)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在
messaging:-activemq 子系统中创建以下 remote-connector<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <remote-connector name="netty-remote-throughput" socket-binding="messaging-remote-throughput"/> ... </subsystem><subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <remote-connector name="netty-remote-throughput" socket-binding="messaging-remote-throughput"/> ... </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加远程目的地出站套接字绑定。
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=messaging-remote-throughput:add(host=localhost, port=61616)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=messaging-remote-throughput:add(host=localhost, port=61616)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在 outbound-
socket:-binding 元素配置中创建以下 remote-destination<outbound-socket-binding name="messaging-remote-throughput"> <remote-destination host="localhost" port="61616"/> </outbound-socket-binding><outbound-socket-binding name="messaging-remote-throughput"> <remote-destination host="localhost" port="61616"/> </outbound-socket-binding>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为远程连接器添加池连接工厂。
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(transaction=xa,entries=[java:/RemoteJmsXA, java:jboss/RemoteJmsXA],connectors=[netty-remote-throughput])
/subsystem=messaging-activemq/pooled-connection-factory=activemq-ra-remote:add(transaction=xa,entries=[java:/RemoteJmsXA, java:jboss/RemoteJmsXA],connectors=[netty-remote-throughput])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在
messaging:-activemq 子系统中创建以下 pooled-connection-factory<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <pooled-connection-factory name="activemq-ra-remote" entries="java:/RemoteJmsXA java:jboss/RemoteJmsXA" connectors="netty-remote-throughput"/> ... </subsystem><subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <pooled-connection-factory name="activemq-ra-remote" entries="java:/RemoteJmsXA java:jboss/RemoteJmsXA" connectors="netty-remote-throughput"/> ... </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Artemis 1.x 需要目标名称上的前缀(jms.topic 用于主题,jms.queue 用于队列)。Artemis 2.x 不需要前缀,但为了与 Artemis 1.x 兼容,EAP 仍然添加前缀并指示 Artemis 在兼容性模式下运行。如果您连接到远程 Artemis 2.x 服务器,它可能不会处于兼容模式,您可能不需要前缀。在不使用前缀的目的地时,您可以通过将属性
enable-amq1-prefix设置为 false,将连接工厂配置为不包含前缀。为队列和主题创建
外部上下文绑定。/subsystem=naming/binding=java\:global\/remoteContext:add(binding-type=external-context, class=javax.naming.InitialContext, module=org.apache.activemq.artemis, environment=[java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory, java.naming.provider.url=tcp://127.0.0.1:61616, queue.MyQueue=MyQueue, queue.MyOtherQueue=MyOtherQueue, topic.MyTopic=MyTopic])
/subsystem=naming/binding=java\:global\/remoteContext:add(binding-type=external-context, class=javax.naming.InitialContext, module=org.apache.activemq.artemis, environment=[java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory, java.naming.provider.url=tcp://127.0.0.1:61616, queue.MyQueue=MyQueue, queue.MyOtherQueue=MyOtherQueue, topic.MyTopic=MyTopic])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在
naming子系统中创建以下外部上下文绑定:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将 JNDI 名称设置为红帽 AMQ 7 地址名称值,为 JMS 队列和主题创建查找条目。这会在 JNDI 名称和 Red Hat AMQ 7 地址名称之间创建一个映射。
/subsystem=naming/binding=java\:\/MyQueue:add(lookup=java:global/remoteContext/MyQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyOtherQueue:add(lookup=java:global/remoteContext/MyOtherQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyTopic:add(lookup=java:global/remoteContext/MyTopic,binding-type=lookup)
/subsystem=naming/binding=java\:\/MyQueue:add(lookup=java:global/remoteContext/MyQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyOtherQueue:add(lookup=java:global/remoteContext/MyOtherQueue,binding-type=lookup) /subsystem=naming/binding=java\:\/MyTopic:add(lookup=java:global/remoteContext/MyTopic,binding-type=lookup)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会在
naming子系统中创建以下查找配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,也可定义
/subsystem=messaging-activemq/external-jms-queue或/subsystem=messaging-activemq/external-jms-topic资源,而不配置 naming 子系统。例如:/subsystem=messaging-activemq/external-jms-queue=MyQueue:add(entries=[java:/MyQueue])
/subsystem=messaging-activemq/external-jms-queue=MyQueue:add(entries=[java:/MyQueue])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会创建以下资源:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <external-jms-queue name="MyQueue" entries="java:/MyQueue"/> ... </subsystem><subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0"> ... <external-jms-queue name="MyQueue" entries="java:/MyQueue"/> ... </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意external-jms-queue资源不提供队列管理和统计数据的操作。
JBoss EAP 现已配置为使用红帽 AMQ 7 的远程安装作为消息传递提供商。