ActiveMQ 5.15.3不支持JMS 2.0 API。大多数开发人员建议项目使用ActiveMQ Artemis,如果他们想要2.0客户端支持。 ActiveMQ Artemis客户端可以连接到ActiveMQ代理吗?
答案 0 :(得分:3)
不,Artemis JMS客户端使用Artemis Core协议,ActiveMQ 5.x代理无法理解该协议,因此您无法使用该客户端连接到该协议。即使您可以启用任何JMS 2.0功能,因为代理需要支持共享订阅等2.0功能。
根据您尝试做的事情,您可以通过JMS 1.1 API使用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不起作用,但是其他一些基于JMSContext的比特的其他语法糖类型API也会起作用。
答案 1 :(得分:1)
Tim表示,不支持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连接器。
*)我没有尝试过共享订阅者等所有功能,因为经纪人可能会或可能没有这些功能。