2015-02-08 106 views
2

我想創建一個參數化的端點來發送消息到JMS隊列,這取決於消息的內容,比如說。 MY_QUEUE。因此,端點URI應該像WSO2 esb端點模板uri參數concat

jms:/MY_QUEUE?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue 

我創建和端點模板是這樣的:

<template xmlns="http://ws.apache.org/ns/synapse" name="TM_out_endpoint_template"> 
    <axis2ns158:parameter xmlns:axis2ns158="http://ws.apache.org/ns/synapse" name="queue"></axis2ns158:parameter> 
    <endpoint name="$name"> 
     <address uri="jms:/$queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue"> 
     <suspendOnFailure> 
      <progressionFactor>1.0</progressionFactor> 
     </suspendOnFailure> 
     <markForSuspension> 
      <retriesBeforeSuspension>0</retriesBeforeSuspension> 
      <retryDelay>0</retryDelay> 
     </markForSuspension> 
     </address> 
    </endpoint> 
</template> 

但是像這樣$隊列參數不會得到處理。如果我替換整個URI,它可以工作,但我想將其餘的URI保留在模板中,而不是從調用序列中傳遞它們。總之我只想傳遞隊列名稱。我如何使用端點模板中的字符串連接參數?例如。 jms:/ $ {queue}?transport ...或者其他東西。有沒有辦法?

回答

1

發生這種情況的原因是,$ queue參數中的$在模板呈現期間因爲之前的/而被忽略。所以你必須用jms:/前綴填充隊列名稱。

這是您的模板的修改版本。

<template xmlns="http://ws.apache.org/ns/synapse" name="TM_out_endpoint_template"> 
    <axis2ns158:parameter xmlns:axis2ns158="http://ws.apache.org/ns/synapse" name="queue"></axis2ns158:parameter> 
    <endpoint name="$name"> 
     <address uri="$queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue"> 
     <suspendOnFailure> 
      <progressionFactor>1.0</progressionFactor> 
     </suspendOnFailure> 
     <markForSuspension> 
      <retriesBeforeSuspension>0</retriesBeforeSuspension> 
      <retryDelay>0</retryDelay> 
     </markForSuspension> 
     </address> 
    </endpoint> 
</template>