I have a "pipe" like this
The inbound adapter loads (via poller) 0-n objects from a database, and returns them as a list, the basic splitter splits the collection into single items which get added a error channel header, and based on the data, the service activator calls a remote service.Code:inbound adapter -> direct channel -> splitter -> direct channel -> chain (header enricher - service activator)
Just like in the Error handling example, my service activator throws an exception if something goes wrong I can't deal with, based on the header data the message ends up in the proper channel and I get notified via email.
The problem here is, if the channel before the service activator contains lets say 100 messages, and the first message throws an error, the 99 that are left are "silently" discarded.
I can make it work properly but making the channel before the service activator chain a queue or a publish subscribe channel, but I still find the "default" behaviour quite counter intuitive. I guess i see some sense in the way its handled since its one thread doing the work, but its still kinda weird :P
This is with SI 1.0.3, has this or will this be changed? Or should I just use publish-subscribe or queue channels and task executors?


Reply With Quote