我是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&rabbitmq.server.port=5672&rabbitmq.server.user.name=test&rabbitmq.server.password=test&rabbitmq.queue.name=outputQueue_001&rabbitmq.exchange.name=amq.direct&rabbitmq.queue.routing.key=outputQueue_001&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}&rabbitmq.server.port=5672&rabbitmq.server.user.name=test&rabbitmq.server.password=test&rabbitmq.queue.name=outputQueue_001&rabbitmq.exchange.name=amq.direct&rabbitmq.queue.routing.key=outputQueue_001&rabbitmq.message.content.type=application/json" />
</endpoint>
在测试期间,我发现未正确注入URI和URI的属性queue.hostname值为:
rabbitmq:/Test?rabbitmq.server.host.name={queue.hostname}&rabbitmq.server.port=5672&rabbitmq.server.user.name=test&rabbitmq.server.password=test&rabbitmq.queue.name=outputQueue_001&rabbitmq.exchange.name=amq.direct&rabbitmq.queue.routing.key=outputQueue_001&rabbitmq.message.content.type=application/json
而不是:
rabbitmq:/Test?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.server.user.name=test&rabbitmq.server.password=test&rabbitmq.queue.name=outputQueue_001&rabbitmq.exchange.name=amq.direct&rabbitmq.queue.routing.key=outputQueue_001&rabbitmq.message.content.type=application/json
你知道我做错了什么吗? 我将apreciate任何示例代码。
提前谢谢!
答案 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