WSO2 - 动态注入端点的值

时间:2016-07-19 17:55:04

标签: wso2esb endpoint

我是WSO2 ESB的新手,我正在努力解决与动态生成的端点地址uris相关的一个问题。

我接着是tutorial如何将RabbitMQ与WSO2集成,我创建了以下端点:

<?xml version="1.0" encoding="UTF-8"?>
    <endpoint xmlns="http://ws.apache.org/ns/synapse" name="Test2">
        <address trace="disable" uri="rabbitmq:/Test?rabbitmq.server.host.name=localhost&amp;rabbitmq.server.port=5672&amp;rabbitmq.server.user.name=test&amp;rabbitmq.server.password=test&amp;rabbitmq.queue.name=outputQueue_001&amp;rabbitmq.exchange.name=amq.direct&amp;rabbitmq.queue.routing.key=outputQueue_001&amp;rabbitmq.message.content.type=application/json" />
</endpoint>

但是,我想动态注入rabbitmq.server.host.name的值,所以我创建了一个本地条目,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <localEntry key="queue.hostname" xmlns="http://ws.apache.org/ns/synapse"><![CDATA[localhost]]></localEntry>

并将该值注入端点:

<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Test2">
    <property expression="get-property('queue.hostname')" name="queue.hostname" scope="default" type="STRING" />
    <address trace="disable" uri="rabbitmq:/Test?rabbitmq.server.host.name={queue.hostname}&amp;rabbitmq.server.port=5672&amp;rabbitmq.server.user.name=test&amp;rabbitmq.server.password=test&amp;rabbitmq.queue.name=outputQueue_001&amp;rabbitmq.exchange.name=amq.direct&amp;rabbitmq.queue.routing.key=outputQueue_001&amp;rabbitmq.message.content.type=application/json" />
</endpoint>

在测试期间,我发现未正确注入URI和URI的属性queue.hostname值为:

rabbitmq:/Test?rabbitmq.server.host.name={queue.hostname}&amp;rabbitmq.server.port=5672&amp;rabbitmq.server.user.name=test&amp;rabbitmq.server.password=test&amp;rabbitmq.queue.name=outputQueue_001&amp;rabbitmq.exchange.name=amq.direct&amp;rabbitmq.queue.routing.key=outputQueue_001&amp;rabbitmq.message.content.type=application/json

而不是:

rabbitmq:/Test?rabbitmq.server.host.name=localhost&amp;rabbitmq.server.port=5672&amp;rabbitmq.server.user.name=test&amp;rabbitmq.server.password=test&amp;rabbitmq.queue.name=outputQueue_001&amp;rabbitmq.exchange.name=amq.direct&amp;rabbitmq.queue.routing.key=outputQueue_001&amp;rabbitmq.message.content.type=application/json

你知道我做错了什么吗? 我将apreciate任何示例代码。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

当您从属性介体中获取值时,它不能在URI的中间分配,因为它不接受参数值。所以你必须使用端点模板。

示例场景:

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

根据您的方案使用它。参考:https://docs.wso2.com/display/ESB490/Endpoint+Template