1
votes

my proejct has a -spring integration fixed delay poller (5 min.) which gets bunch of records - sends it to the splitter, which splits the records and sends them to taskexector router channel with pool size as 2 at the output channel and send each record for further processing at service activator and received at aggregator. Flow is working fine.

However the fixed delay is treating the previous execution time as upto where it is handing the records to task executor and not when all the records processing completed and received at aggregater channel.

How to make the poller wait for 5 minutes after all the records processing completed instead wait for 5 minutes from handing over at the splitter channel ?

Configuration:

using the spring integration 2.2.0.RELEASE and spring 3.1.1.RELEASE versions

<integration:channel id="splitterChannel"/>
    <integration:channel id="serviceRequestChannel"/>
    <integration:channel id="aggregatorChannel"/>

    <task:executor id="taskExecutor" pool-size="2"/>

    <integration:channel id="routerChannel" >
        <integration:dispatcher task-executor="taskExecutor"/>
    </integration:channel>

   <integration:inbound-channel-adapter
            id="inboundAdapter"
            method="retrieveReadyRecords"
            channel="splitterChannel"
            ref="inboundChannelAdapter" auto-startup="true">
       <integration:poller
                trigger="batchtrigger"/>
    </integration:inbound-channel-adapter>

    <integration:splitter
            input-channel="splitterChannel"
            expression="payload"
            output-channel="routerChannel"/>

  <integration:recipient-list-router input-channel="routerChannel">
        <integration:recipient channel="aggregatorChannel"      selector-expression="xxx"/>
        <integration:recipient channel="serviceRequestChannel"  selector-expression="zzzz"/>
    </integration:recipient-list-router>

--- also further configuration for below service requests sending to aggretor

1

1 Answers

0
votes

You have to suspend the poller thread until all the async downstream operations have completed.

One way would be a blocking queue within a <service-activator/> where the poller thread waits for a signal from the downstream processing to continue. Then the trigger will start from that point.