Apache ActiveMQ Artemis 客户端能否连接到现有的 ActiveMQ 代理 5.15.X?
Can an Apache ActiveMQ Artemis client connect to an existing ActiveMQ broker 5.15.X?
ActiveMQ 5.15.3 不支持 JMS 2.0 API。如果项目需要 2.0 客户端支持,大多数开发人员建议项目使用 ActiveMQ Artemis。 ActiveMQ Artemis 客户端可以连接到 ActiveMQ 代理吗?
不,Artemis JMS 客户端使用 ActiveMQ 5.x 代理不理解的 Artemis Core 协议,因此您无法与该客户端连接。即使您可以,也不会启用任何 JMS 2.0 功能,因为代理需要支持共享订阅等 2.0 功能。
根据您尝试执行的操作,有一个很好的更改,您仍然可以通过 JMS 1.1 APIs 使用 ActiveMQ JMS 客户端来执行此操作,例如使用虚拟主题来实现共享样式订阅行为。
Artemis Broker 确实理解 OpenWire 协议,因此您可以使用相同的 ActiveMQ 5.x JMS 客户端连接到两者,但是该客户端仅限于 JMS 1.1 API。
两个代理也都支持 AMQP 1.0,因此 Qpid JMS AMQP 1.0 客户端将能够与任一代理对话。 Qpid-JMS 是基于 JMS 2.0 的客户端,因此 2.0 的功能(如共享订阅)不适用于 ActiveMQ 5.x,但 2.0 的一些其他语法糖类型 APIs(如基于 JMSContext 的位)大部分都会工作。
正如蒂姆所说,不支持 Artemis 客户端。但是,如果您改用 QPid 客户端和 AMQP 1.0 协议,至少 JMS 2.0 API 的某些部分*可以工作。
例如,以下代码用于将消息发送到 ActiveMQ 5.15
Hashtable<String,Object> properties = new Hashtable<>();
properties.put("connectionfactory.connectionFactory","amqp://localhost:5672");
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
Context jndiContext = new InitialContext(properties);
ConnectionFactory connectionFactory
= (ConnectionFactory) jndiContext.lookup("connectionFactory");
try (JMSContext context = connectionFactory.createContext();) {
context.createProducer().send(context.createQueue("QueueX"),"Hello World" );
}
使用 qpid-jms-client 0.29.
您还需要使用 transport.transformer=jms
配置 ActiveMQ 的 amqp 连接器。
*) 我没有尝试过所有功能,例如共享订阅者等,因为经纪人可能会或可能不会遇到这些问题。
ActiveMQ 5.15.3 不支持 JMS 2.0 API。如果项目需要 2.0 客户端支持,大多数开发人员建议项目使用 ActiveMQ Artemis。 ActiveMQ Artemis 客户端可以连接到 ActiveMQ 代理吗?
不,Artemis JMS 客户端使用 ActiveMQ 5.x 代理不理解的 Artemis Core 协议,因此您无法与该客户端连接。即使您可以,也不会启用任何 JMS 2.0 功能,因为代理需要支持共享订阅等 2.0 功能。
根据您尝试执行的操作,有一个很好的更改,您仍然可以通过 JMS 1.1 APIs 使用 ActiveMQ JMS 客户端来执行此操作,例如使用虚拟主题来实现共享样式订阅行为。
Artemis Broker 确实理解 OpenWire 协议,因此您可以使用相同的 ActiveMQ 5.x JMS 客户端连接到两者,但是该客户端仅限于 JMS 1.1 API。
两个代理也都支持 AMQP 1.0,因此 Qpid JMS AMQP 1.0 客户端将能够与任一代理对话。 Qpid-JMS 是基于 JMS 2.0 的客户端,因此 2.0 的功能(如共享订阅)不适用于 ActiveMQ 5.x,但 2.0 的一些其他语法糖类型 APIs(如基于 JMSContext 的位)大部分都会工作。
正如蒂姆所说,不支持 Artemis 客户端。但是,如果您改用 QPid 客户端和 AMQP 1.0 协议,至少 JMS 2.0 API 的某些部分*可以工作。
例如,以下代码用于将消息发送到 ActiveMQ 5.15
Hashtable<String,Object> properties = new Hashtable<>();
properties.put("connectionfactory.connectionFactory","amqp://localhost:5672");
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
Context jndiContext = new InitialContext(properties);
ConnectionFactory connectionFactory
= (ConnectionFactory) jndiContext.lookup("connectionFactory");
try (JMSContext context = connectionFactory.createContext();) {
context.createProducer().send(context.createQueue("QueueX"),"Hello World" );
}
使用 qpid-jms-client 0.29.
您还需要使用 transport.transformer=jms
配置 ActiveMQ 的 amqp 连接器。
*) 我没有尝试过所有功能,例如共享订阅者等,因为经纪人可能会或可能不会遇到这些问题。