Пролетни интеграционни потоци

Така че работя върху приложение за пролетна интеграция, което има стотици потоци. Всички тези потоци основно представляват услуга в приложението като

Report Generation
Customer Search
Get Customer Transactions
Customer Activity Stream
etc.

Исках да валидирам заявките, изпратени до тези потоци (основно проверявайки дали спецификациите на параметрите са изпълнени), така че създадох друг поток отделно за валидиране на заявки, така че всяка заявка, изпратена до горните услуги, първо ще премине през потока за валидиране. Сега се чудя как да отчитам това в потоците на услугата.

Вижте по-долу за подробности.

Поток на валидиране --- >

    <int:channel id="svcExeGovernorEntryLoggerChannel"/>

    <int:channel id="svcExeGovernorEntryRespChannel" >
        <int:interceptors>
            <int:wire-tap channel="svcExeGovernorEntryLoggerChannel"/>
        </int:interceptors>
    </int:channel>

    <int:transformer id="serviceExecutionGovernorEntry" ref="serviceExecutionGovernor" method="serviceExecutionEntry" input-channel="svcExeGovernorEntryReqChannel" output-channel="svcExeGovernorEntryRespChannel"/> 

    <int:logging-channel-adapter id="svcExeGovernorEntryLogger" channel="svcExeGovernorEntryLoggerChannel"  logger-name="svcExeGovernor-entry-logger" />

</beans>

Опитах се да използвам мост, както е показано по-долу, но това не работи, изпраща изхода на друга услуга.

<int:channel id="customerCrawlReqChannel">
        <int:interceptors>
            <int:wire-tap channel="customerCrawlLoggerChannel"/>
        </int:interceptors>
    </int:channel>
    <int:channel id="customerCrawlRespChannel">
        <int:interceptors>
            <int:wire-tap channel="customerCrawlLoggerChannel"/>
        </int:interceptors>
    </int:channel>
    <int:channel id="customerCrawlLoggerChannel"/>
    <int:channel id="customerCrawlResultChannel">
        <int:interceptors>
            <int:wire-tap channel="customerCrawlLoggerChannel"/>
        </int:interceptors>
    </int:channel>
    <int:channel id="customerCrawlJsonChannel"/>

    <http:inbound-gateway id="customerCrawlInboundGateway"
                          supported-methods="POST"
                          mapped-request-headers="User-Agent,Content-Type"
                          request-payload-type="java.lang.String"
                          path="/service/customercrawl"
                          reply-timeout="50000"
                          request-channel="customerCrawlReqChannel"
                          reply-channel="customerCrawlRespChannel">        
    </http:inbound-gateway>


    <int:bridge input-channel="customerCrawlReqChannel" output-channel="svcExeGovernorEntryReqChannel"/>


    <int:transformer id="customerCrawlPrvder" ref="crawlCustomerProviderService" method="crawlCustomer" input-channel="svcExeGovernorEntryRespChannel" output-channel="customerCrawlResultChannel"/>        


    <int:header-enricher input-channel="customerCrawlResultChannel"        output-channel="customerCrawlRespChannel">
        <int:header name="Content-Type" expression="'application/json'" />
    </int:header-enricher>       
    <int:logging-channel-adapter   
    id="customerCrawlLogger"channel="customerCrawlLoggerChannel"  logger-
    name="customerCrawl-logger"/>

Моля за всякакви предложения около това, благодаря предварително.


person codereal    schedule 28.11.2015    source източник


Отговори (1)


Ако има множество абонати на svcExeGovernorEntryRespChannel, тогава тези отговори ще бъдат разпределени кръгово на тези потребители; няма нищо в рамката, което да каже към кой поток от абонати да се върне.

Ако искате да добавите един и същ поток за валидиране към множество потоци в един и същи контекст, използвайте шлюз за среден поток...

<int:service-activator 
            input-channel="customerCrawlReqChannel" 
            output-channel="customerCrawlReqAfterValidationChannel"
            ref="validationGW" />

<int:gateway id="validationGW"
            default-request-channel="svcExeGovernorEntryLoggerChannel"
            default-reply-channel="svcExeGovernorEntryRespChannel" />

Това е като извикване на метод в java с входното съобщение като параметър и изходното съобщение като резултат.

Или можете да използвате фиш за маршрутизиране. Настройте маршрута до следващия елемент след валидирането и премахнете изходния канал от последния елемент в потока за валидиране.

person Gary Russell    schedule 28.11.2015
comment
Здравей Гари, благодаря, изглежда, че това работи, направих го за 3 потока услуги досега и всичко е наред. Благодаря отново - person codereal; 30.11.2015
comment
Готино; тук е обичайно да се маркира отговор като "приет" (зелена отметка под гласовете). Това ще помогне на други потребители, когато търсят подобни въпроси. - person Gary Russell; 30.11.2015