Как использовать мои конфигурации реестра в WSO2 Enterprise Integrator в процессоре сообщений

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