簡體   English   中英

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 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,但其他一些2.0的語法糖類型的API(如基於JMSContext的位)則可以正常工作。

正如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配置amqp連接器i ActiveMQ。

*)我沒有嘗試過所有功能,例如共享訂戶等,因為經紀人可能會也可能不會遇到麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM