0
votes

I have an integration application that mostly works, but noticed yesterday a message was lost. At the time, the service-activator endpoint was extremely busy processing a previous message.

Basically, my integration flow is: jdbc:inbound-channel-adapter --> splitter -> aggregator (based on a type field) -> [pollable channel] --> service-activator

From the log, I can see a group of messages polled, split, aggregated, expired (via a message store reaper), and placed on the creation channel. There is a preSend and postSend event in the log for placing the message on the creationChannel, but that's the end of it. It never gets to my service-activator, there's no messages in the jdbc message store and I dont see any errors.

Could there an issue with how I have either the service-activator or poller configured (or a combination)?

Here is the configuration applicable to the issue.

<int:poller default="true" fixed-delay="1000" receive-timeout="0" />    
<int-jdbc:message-store id="jdbc-messageStore" data-source="dataSource"  /> 

<int:channel id="creationChannel" >
   <int:queue  message-store="jdbc-messageStore" />
</int:channel>               

<!-- Endpoint responsible for creating Archive from List of Document objects -->
<bean id="archiveCreator" class="org.abc.ArchiveCreator"/>

<int:service-activator ref="archiveCreator" method="createArchive" input-channel="creationChannel" />
1

1 Answers

0
votes

First of all you should mark your <poller> as <transactional>.

Another point switch on the org.springframework.integration DEBUG logging level and show here the log, when a message is lost.