Apache ActiveMQ Artemis客户端可以连接到现有的ActiveMQ代理5.15.X吗?

时间:2018-02-15 19:13:59

标签: java jms activemq activemq-artemis

ActiveMQ 5.15.3不支持JMS 2.0 API。大多数开发人员建议项目使用ActiveMQ Artemis,如果他们想要2.0客户端支持。 ActiveMQ Artemis客户端可以连接到ActiveMQ代理吗?

2 个答案:

答案 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连接器。

*)我没有尝试过共享订阅者等所有功能,因为经纪人可能会或可能没有这些功能。