#wso2 #wso2esb #wso2ei
# #wso2 #wso2-enterprise-integrator #wso2-esb
Вопрос:
Я работаю с WSO2 Enterprise Integrator 6.6.0. У меня есть файл usage-service-config
в моем приложении, файл ниже
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="usage-service-config" xmlns="http://ws.apache.org/ns/synapse">
<configuration xmlns="http://config.usageService.gravity.hp.com">
<!-- Local End Points -->
<dss_ep>https://localhost:8243/services/ds</dss_ep>
<api>https://localhost:8243/usage</api>
<api_ep>https://localhost:8243/api</api_ep>
</configuration>
</localEntry>
Я хочу использовать одно из значений, хранящихся в приведенном выше файле, в конечной точке при вызове конечной точки через процессор сообщений
Как я могу этого добиться?
Вот поток моего приложения :
Последовательность:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="usageService-get-processDcsCustomers-seq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<property description="Get Configuration" expression="get-property('registry','conf:/usage-service/usage-service-config.xml')" name="usage-service-config" scope="default" type="OM"/>
<property description="Get DSS Endpoint" expression="$ctx:usage-service-config//n0:usageService_dss_ep/text()" name="uri.var.usageService_dss_ep" scope="default" type="STRING" xmlns:n0="http://config.usageService.gravity.hp.com"/>
<call>
<endpoint key="some-data-ep"/>
</call>
<log level="full"/>
<foreach expression="//gravity:allCustomers/gravity:customers" id="allCustomers" xmlns:gravity="some-ds">
<sequence>
<property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
<store messageStore="my-ms"/>
</sequence>
</foreach>
</sequence>
Хранилище сообщений:
<?xml version="1.0" encoding="UTF-8"?>
<messageStore class="org.apache.synapse.message.store.impl.memory.InMemoryStore" name="my-ms" xmlns="http://ws.apache.org/ns/synapse"/>
Процессор сообщений:
<?xml version="1.0" encoding="UTF-8"?>
<messageProcessor class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" messageStore="my-ms" name="my-mp" targetEndpoint="my-ep" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="client.retry.interval">1000</parameter>
<parameter name="max.delivery.attempts">1</parameter>
<parameter name="member.count">1</parameter>
<parameter name="non.retry.status.codes">400</parameter>
<parameter name="max.delivery.drop">Enabled</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="target.endpoint">my-ep</parameter>
</messageProcessor>
Конечная точка:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint name="my-ep" xmlns="http://ws.apache.org/ns/synapse">
<http method="post" uri-template="https://localhost:8243/api/abc"/>
</endpoint>
API:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/api" name="my-api" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="pOST" protocol="https" uri-template="/health">
<inSequence>
<property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
<sequence key="my-seq"/>
<loopback/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
Как я могу использовать значения файла конфигурации для вызова конечной точки?
Ответ №1:
Я хочу использовать одно из значений, хранящихся в приведенном выше файле, в конечной точке при вызове конечной точки через процессор сообщений
В самом процессоре сообщений может быть настроено только одно статическое значение. Тем не менее, вы можете создать прокси-сервис или API, где вы можете считывать значение из реестра и вызывать настроенную конечную точку.
Если вы хотите динамически изменять целевую конечную точку, вы можете изменить To
заголовок.
<property name="xmlvalue" expression="get-property('registry', 'gov:/xml/body.xml')" type="OM" /
<header name="To" expression="$ctx:xmlvalue//api_ep" />
<!-- send or call ->
Ответ №2:
Я смог преодолеть это, получив мои конфигурации реестра в последовательности, в которой я сохраняю данные в хранилище сообщений. а затем использовал то же свойство в конечной точке, которое я вызывал из хранилища сообщений
Последовательность
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="usageService-get-processDcsCustomers-seq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<property description="Get Configuration" expression="get-property('registry','conf:/usage-service/usage-service-config.xml')" name="usage-service-config" scope="default" type="OM"/>
<property description="Get DSS Endpoint" expression="$ctx:usage-service-config//n0:usageService_dss_ep/text()" name="uri.var.usageService_dss_ep" scope="default" type="STRING" xmlns:n0="http://config.usageService.gravity.hp.com"/>
<property description="Get API Endpiont" expression="$ctx:usage-service-config//n0:api_ep/text()" name="uri.var.link" scope="default" type="STRING" xmlns:n0="http://config.usageService.gravity.hp.com"/>
<call>
<endpoint key="some-data-ep"/>
</call>
<log level="full"/>
<foreach expression="//gravity:allCustomers/gravity:customers" id="allCustomers" xmlns:gravity="some-ds">
<sequence>
<property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
<store messageStore="my-ms"/>
</sequence>
</foreach>
</sequence>
Конечная точка
<?xml version="1.0" encoding="UTF-8"?>
<endpoint name="my-ep" xmlns="http://ws.apache.org/ns/synapse">
<http method="post" uri-template="{uri.var.link}/abc"/>
</endpoint>