2017-02-01 33 views
0

我使用Apache camel将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绑定是我的各种值的散列表。当我尝试运行骆驼方面,我得到的错误

2017年2月1日下午6时11分09秒 org.apache.camel.component.jms.DefaultJmsMessageListenerContainer handleListenerSetupFailure警告:JMS消息监听器 的设置调用者失败的目的地'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))) 

补救的问题。