ActiveMQ 5.15.3不支持JMS 2.0 API。大多数开发人员建议项目如果需要2.0客户支持,请使用ActiveMQ Artemis。ActiveMQ Artemis客户端可以连接到ActiveMQ经纪人吗?
no,Artemis JMS客户端使用Artemis Core协议,ActiveMQ 5.X Broker不了解该协议,因此您无法与该客户端连接到它。即使您可以,这将无法启用任何JMS 2.0功能,因为经纪人需要支持2.0功能,例如共享订阅等。
根据您尝试做的事情,您仍然可以通过JMS 1.1 API的ActiveMQ JMS客户端进行良好的更改,例如使用虚拟主题来实现共享样式订阅行为。
Artemis经纪人确实了解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无法使用,但是其他一些句法糖类型API(例如JMScontext基于JMScontext的位(主要是可行的。
正如蒂姆(Tim(所述,不支持阿耳emis派客户端。但是,如果您使用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
配置AMQP连接器I ActiveMQ。
*(我没有尝试过所有功能,例如共享订户等,因为经纪人可能会或可能不会遇到这些功能。