WSO2 esb 端点模板 uri 参数 concat
WSO2 esb endpoint template uri parameter concat
我想创建一个参数化端点以根据消息的内容将消息发送到 JMS 队列,例如MY_QUEUE。因此,端点 uri 应该看起来像
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>
但是这样 $queue 参数将不会得到处理。如果我替换整个 URI,它会起作用,但我想将 URI 的其余部分保留在模板中,而不是从调用序列中传递它们。简而言之,我只想传递队列名称。如何在端点模板中将参数与字符串连接起来?例如。 jms:/${queue}?transport... 之类的。有办法吗?
发生这种情况是因为,在模板呈现期间,$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>
我想创建一个参数化端点以根据消息的内容将消息发送到 JMS 队列,例如MY_QUEUE。因此,端点 uri 应该看起来像
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>
但是这样 $queue 参数将不会得到处理。如果我替换整个 URI,它会起作用,但我想将 URI 的其余部分保留在模板中,而不是从调用序列中传递它们。简而言之,我只想传递队列名称。如何在端点模板中将参数与字符串连接起来?例如。 jms:/${queue}?transport... 之类的。有办法吗?
发生这种情况是因为,在模板呈现期间,$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>