2017-02-01 15 views
0

Я использую верблюд Apache, чтобы переместить Weblogic JMS в Kafka. Для weblogic JMS я подключаюсь к теме, используя JDNI, чтобы получить название темы. Когда я осмотреть объект, возвращаемый из моего поиска на моем контексте я вижу, что у меня есть название темыНастройка Apache Camel Название темы

Я настраиваю соединение, как так (это лишь доказательство концепции)

(defn topic-con-factory 
    [] 
    (let [props (Properties.)] 
    (.put props "java.naming.factory.initial" "weblogic.jndi.WLInitialContextFactory") 
    (.put props "java.naming.provider.url" (:host wl-ctx)) 
    (.put props "java.naming.security.principal" (:username wl-ctx)) 
    (.put props "java.naming.security.credentials" (:password wl-ctx)) 
    (.put props "weblogic.jndi.createIntermediateContexts" "true") 
    ;;please ignore my horrible horrible abuse of let here 
    (let [ctx (InitialContext. props) 
      conn-factory (.lookup ctx (:factoryJNDI wl-ctx)) 
      wlcontext (DefaultCamelContext. ctx) 
      topic (.lookup ctx (:topicJNDI wl-ctx)) 
      ] 
     [conn-factory topic]))) 

(defn build-jms-component 
    [factory] 
    (let [jms (JmsComponent.)] 
    (.setConnectionFactory jms factory) 
    (.setClientId jms (:clientId wl-ctx)) 
    (.setDurableSubscriptionName jms (:subName wl-ctx)) 
    jms)) 

(defn camel-context [] 
    (let [[factory topic] (topic-con-factory) 
     ctx (camel/make-context)] 
    (println "topic " topic "!!!!!!!!") 
    (.addComponent ctx "jms" (build-jms-component factory)) 
    (camel/defroute ctx 
     :err-handler (camel/default-error-handler) 
     (camel/from (str "jms:topic:" (.getTopicName topic))) 
     (camel/to kafka-urn)) 
    ctx)) 

Где Связывание wl-ctx - это хэш-карта моих различных значений. Когда я пытаюсь запустить верблюжьей контекст я получаю ошибку

1 февраля 2017 6:11:09 PM org.apache.camel.component.jms.DefaultJmsMessageListenerContainer handleListenerSetupFailure ВНИМАНИЕ: Настройка JMS сообщения слушателя invoker не удалось для пункта назначения «CENX-WL-JMS! testTopic» - попытка восстановить . Объяснение: [JMSExceptions: 045101] Имя адресата, переданное в , недействительно. CreateTopic или createQueue "MY-WL-SERVER! TestTopic". Если имя адресата не содержит символ «/», то оно должно быть имя распределенного адресата, доступное в кластере , к которому подключен клиент. Если он содержит символ «/», , то строка перед «/» должна быть именем JMS-сервера или «.». Строка после «/» - это имя желаемого адресата . Если используется «./» версия строки, то возвращается адресат с заданным именем на локальном экземпляре WebLogic Server .

Из сообщения, похоже, мне нужно использовать «/» для разделителя между именем сервера и именем темы. Но если я использую его вместо взрыва, поиск темы не удастся.

Есть ли способ перенастроить мой JMSComponent для принятия! как разделитель вместо /?

ответ

0

Ошибка была сделана, и имя модуля JMS было очень похоже на имя сервера. Действительное название темы в этом случае должно быть

MY_JMS_SERVER/my_module! MY_TOPIC

Так делают

(camel/from (str "jms:topic:" (str my-server "/" (.getTopicName topic))) 

устранить проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^