2016-07-19 7 views
2

Ich bin ein Neuling in WSO2 ESB und ich habe mit einem Problem im Zusammenhang mit der dynamisch generierten Endpunkt Adresse Uris.WSO2 - Wert dynamisch in den Endpunkt injiziert

ich von den tutorial gefolgt, wie RabbitMQ mit WSO2 zu integrieren und ich erstellt folgendem Endpunkt:

<?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> 

Ich wollte aber dynamisch Wert von rabbitmq.server.host.name injizieren, so habe ich ein lokale Eintrag, wie unten:

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

und injizierten diesen Wert an den Endpunkt:

<?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> 

Bei Tests entdeckte ich, dass Eigenschaft queue.hostname Wert in nicht korrekt injiziert an den URI und URI ist:

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 

statt:

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 

Sie wissen, was ich tue falsch? Ich werde alle Beispielcodes schätzen.

Vielen Dank im Voraus!

+1

Was ist die ESB-Version, die Sie verwenden? –

+0

wso2esb-5.0.0-beta, aber ich kann leicht auf die wso2esb-5.0.0-beta2 wechseln, wenn es benötigt wird – bontade

Antwort

1

Wenn Sie Werte vom Eigenschaftsmediator übernehmen, kann sie nicht in der Mitte des URI zugeordnet werden, da Parameterwerte nicht übernommen werden. Sie müssen dafür Endpunktvorlagen verwenden.

Beispielszenario:

<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> 

verwenden, die für Ihr Szenario nach. Referenz: https://docs.wso2.com/display/ESB490/Endpoint+Template

+0

Ok, danke, ich werde es testen. Um ehrlich zu sein, suchte ich nach einer Beschreibung des Tags namens axis2ns158 und konnte nichts Interessantes finden. Woher wussten Sie, dass wir dieses Tag verwenden sollten? – bontade

+1

Es wird von Synapse (als Referenz) hinzugefügt, wenn Sie Parameter in der Endpunktvorlage hinzufügen. Sie müssen es nicht zwingend hinzufügen. U kann dies über die Management Console testen. –

Verwandte Themen