如何在 Wildfly 和 ApacheActiveMQ Artemis 之间创建 jms-bridge?
How to create jms-bridge between Wildfly and ApacheActiveMQ Artemis?
我正在尝试创建一个从我的 WF 14.0.1.Final 到 Artemis 2.6.3 独立代理的 jms-bridge。
当我这样架桥时:
<jms-bridge name="HelloWorldQueue-jms-bridge" quality-of-service="DUPLICATES_OK" failure-retry-interval="5000" max-retries="-1" max-batch-size="10" max-batch-time="100">
<source connection-factory="ConnectionFactory" destination="queue/HelloWorldQueue"/>
<target connection-factory="jms/RemoteConnectionFactory" destination="dynamicQueues/myQueue" user="admin" password="admin">
<target-context>
<property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
<property name="java.naming.provider.url" value="tcp://localhost:5445?type=CF"/>
</target-context>
</target>
</jms-bridge>
我明白了
[org.apache.activemq.artemis.jms.bridge] (Thread-98) AMQ342010: Failed to connect JMS Bridge N/A: javax.naming.NameNotFoundException: jms/RemoteConnectionFactory
at org.apache.activemq.artemis.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:236)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at org.apache.activemq.artemis.jms.bridge.impl.JNDIFactorySupport.createObject(JNDIFactorySupport.java:46)
at org.apache.activemq.artemis.jms.bridge.impl.JNDIConnectionFactoryFactory.createConnectionFactory(JNDIConnectionFactoryFactory.java:31)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.createConnection(JMSBridgeImpl.java:961)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.setupJMSObjects(JMSBridgeImpl.java:1159)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.setupJMSObjectsWithRetry(JMSBridgeImpl.java:1258)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.access00(JMSBridgeImpl.java:74)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl$FailureHandler.run(JMSBridgeImpl.java:1759)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
并且没有关于如何执行此操作的教程。
将 JMS 桥视为任何普通的远程 JMS 客户端。它使用 JMS 和 JNDI API 来访问任何兼容的代理。唯一需要配置的是 JNDI 环境参数(例如 InitialContext 工厂等)和 JNDI 查找名称(即连接工厂和目标)。
当网桥试图从网桥 target
中查找 connection-factory
时失败。这是配置方式:
<target connection-factory="jms/RemoteConnectionFactory" destination="dynamicQueues/myQueue" user="admin" password="admin">
<target-context>
<property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
<property name="java.naming.provider.url" value="tcp://localhost:5445?type=CF"/>
</target-context>
</target>
您已将 connection-factory
配置为 jms/RemoteConnectionFactory
。但是,默认情况下该连接工厂不可用,并且您没有在 target-context
属性中明确配置它,因此您会收到 javax.naming.NameNotFoundException
。我建议您只使用默认存在的连接工厂名称之一,例如ConnectionFactory
。这样的更改将产生此配置:
<target connection-factory="ConnectionFactory" destination="dynamicQueues/myQueue" user="admin" password="admin">
<target-context>
<property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
<property name="java.naming.provider.url" value="tcp://localhost:5445?type=CF"/>
</target-context>
</target>
我正在尝试创建一个从我的 WF 14.0.1.Final 到 Artemis 2.6.3 独立代理的 jms-bridge。
当我这样架桥时:
<jms-bridge name="HelloWorldQueue-jms-bridge" quality-of-service="DUPLICATES_OK" failure-retry-interval="5000" max-retries="-1" max-batch-size="10" max-batch-time="100">
<source connection-factory="ConnectionFactory" destination="queue/HelloWorldQueue"/>
<target connection-factory="jms/RemoteConnectionFactory" destination="dynamicQueues/myQueue" user="admin" password="admin">
<target-context>
<property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
<property name="java.naming.provider.url" value="tcp://localhost:5445?type=CF"/>
</target-context>
</target>
</jms-bridge>
我明白了
[org.apache.activemq.artemis.jms.bridge] (Thread-98) AMQ342010: Failed to connect JMS Bridge N/A: javax.naming.NameNotFoundException: jms/RemoteConnectionFactory
at org.apache.activemq.artemis.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:236)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at org.apache.activemq.artemis.jms.bridge.impl.JNDIFactorySupport.createObject(JNDIFactorySupport.java:46)
at org.apache.activemq.artemis.jms.bridge.impl.JNDIConnectionFactoryFactory.createConnectionFactory(JNDIConnectionFactoryFactory.java:31)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.createConnection(JMSBridgeImpl.java:961)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.setupJMSObjects(JMSBridgeImpl.java:1159)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.setupJMSObjectsWithRetry(JMSBridgeImpl.java:1258)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl.access00(JMSBridgeImpl.java:74)
at org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl$FailureHandler.run(JMSBridgeImpl.java:1759)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
并且没有关于如何执行此操作的教程。
将 JMS 桥视为任何普通的远程 JMS 客户端。它使用 JMS 和 JNDI API 来访问任何兼容的代理。唯一需要配置的是 JNDI 环境参数(例如 InitialContext 工厂等)和 JNDI 查找名称(即连接工厂和目标)。
当网桥试图从网桥 target
中查找 connection-factory
时失败。这是配置方式:
<target connection-factory="jms/RemoteConnectionFactory" destination="dynamicQueues/myQueue" user="admin" password="admin">
<target-context>
<property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
<property name="java.naming.provider.url" value="tcp://localhost:5445?type=CF"/>
</target-context>
</target>
您已将 connection-factory
配置为 jms/RemoteConnectionFactory
。但是,默认情况下该连接工厂不可用,并且您没有在 target-context
属性中明确配置它,因此您会收到 javax.naming.NameNotFoundException
。我建议您只使用默认存在的连接工厂名称之一,例如ConnectionFactory
。这样的更改将产生此配置:
<target connection-factory="ConnectionFactory" destination="dynamicQueues/myQueue" user="admin" password="admin">
<target-context>
<property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
<property name="java.naming.provider.url" value="tcp://localhost:5445?type=CF"/>
</target-context>
</target>