2015-09-29 5 views
1

В настоящее время у меня есть экземпляр ActiveMQ, который я пытаюсь подключиться к использованию immutant. В настоящее время код для этого соединения выглядит так;Не удается подключиться к очереди с помощью Immutant messaging

(defn make-ctx 
    [] 
    (log/debug "making context") 
    (let [ctx (m/context :host (:host immutant-host) :port (:port immutant-host))] 
    (log/debug "context created") 
    ctx)) 

(defn make-listener 
    [ctx] 
    (let [listener (m/listen topiC#(log/debug %) :context ctx)] 
    (log/debug "listener created") 
    listener)) 

(defn immutant-test 
    [] 
    (log/debug "testing immutant messaging with ActiveMQ") 
    (let [ctx (make-ctx) 
     listener (make-listener ctx)] 
    (Thread/sleep 15000) 
    (.close listener))) 

Хотя мой код не пропускает функцию make-ctx. Когда он пытается создать контекст, я получаю ошибку

Exception in thread "main" java.lang.RuntimeException: javax.jms.JMSException: Failed to create session factory 
    at org.projectodd.wunderboss.messaging.jms.DestinationUtil.mightThrow(DestinationUtil.java:47) 
    at org.projectodd.wunderboss.messaging.jms.JMSMessagingSkeleton.createContext(JMSMessagingSkeleton.java:64) 
    at org.projectodd.wunderboss.messaging.jms.JMSMessagingSkeleton.createContext(JMSMessagingSkeleton.java:181) 
    at immutant.messaging$context.doInvoke(messaging.clj:84) 
    at clojure.lang.RestFn.invoke(RestFn.java:457) 
    at jms_test.core$make_ctx.invoke(core.clj:24) 
    at jms_test.core$immutant_test.invoke(core.clj:37) 
    at jms_test.core$_main.invoke(core.clj:158) 
    at clojure.lang.AFn.applyToHelper(AFn.java:152) 
    at clojure.lang.AFn.applyTo(AFn.java:144) 
    at jms_test.core.main(Unknown Source) 
Caused by: javax.jms.JMSException: Failed to create session factory 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:673) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:112) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:107) 
    at org.projectodd.wunderboss.messaging.jms.JMSMessagingSkeleton$1.call(JMSMessagingSkeleton.java:73) 
    at org.projectodd.wunderboss.messaging.jms.DestinationUtil.mightThrow(DestinationUtil.java:45) 
    ... 10 more 
Caused by: HornetQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=HQ119013: Timed out waiting to receive cluster topology. Group:null] 
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:946) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:669) 
    ... 14 more 

immutant-хост определяется как

(def immutant-host {:host "127.0.0.1" :port 61616}) 

я смог подключиться к моему брокеру с clamq libray, и я в состоянии отправлять и получать сообщения с этим. Хотя из-за того, что остальная часть приложения построена с использованием явной передачи сообщений, я хотел бы придерживаться этой библиотеки, если это возможно, чтобы не поддерживать несколько библиотек сообщений.

ответ

1

Иммутатор построен поверх HornetQ, поэтому он может подключаться только к серверам HornetQ по умолчанию. Это связано с тем, что спецификация JMS не обеспечивает проводной протокол, поэтому каждая реализация имеет свои собственные. Однако если удаленный ActiveMQ на самом деле Artemis, вы можете использовать wunderboss-artemis, чтобы включить его из Immutant (обратите внимание, что в статье говорится, что вы должны использовать инкрементную сборку Immutant - это уже не так, вы можете использовать Immutant 2.1.0) ,

Если это не Артемида, было бы непросто реализовать адаптер wunderboss-activemq, используя версию artemis в качестве руководства.