1

現在、私は immutant を使用して接続しようとしている ActiveMQ のインスタンスを実行しています。現在、この接続のコードは次のようになっています。

(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-host は次のように定義されます。

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

clamq libray を使用してブローカーに接続でき、それを使用してメッセージを送受信できます。ただし、アプリケーションの残りの部分は不変のメッセージングで構築されているため、複数のメッセージング ライブラリをサポートする必要がないように、可能であればそのライブラリを使い続けたいと考えています。

4

1 に答える 1

1

Immutant は HornetQ の上に構築されているため、デフォルトでは HornetQ サーバーにのみ接続できます。これは、JMS 仕様がワイヤ プロトコルを提供していないためであり、各実装には独自のプロトコルがあります。ただし、リモートの ActiveMQ が実際にはArtemisである場合は、wunderboss-artemisを使用して Immutant からの使用を有効にすることができます (この記事では Immutant のインクリメンタル ビルドを使用する必要があることに注意してください。これはもはや当てはまりません。Immutant 2.1 を使用できます。 0)。

Artemis でなければwunderboss-activemq、artemis バージョンをガイドとして使用してアダプターを実装することはそれほど難しくありません。

于 2015-09-29T19:35:01.440 に答える