java - Next channel in Pipe Filter design not being invoked - Spring Integration -
i new spring integration , trying learn. trying implement pipe filter design. idea send message channel particular message endpoint processes message , passes next channel. here spring config
<int:gateway id="instancerequest" service-interface="com.trivialjava.rnd.spring_inttest.requestprocessor"/> <!-- each request checked type , sent proper channel --> <int:channel id="requests"/> <int:splitter input-channel="requests" expression="payload.request" output-channel="requestdata"/> <int:channel id="requestdata"/> <int:router input-channel="requestdata" expression="payload.class.name"> <int:mapping value="com.trivialjava.rnd.entity.instancerequest" channel="instancerequests"/> <int:mapping value="com.trivialjava.rnd.entity.solutionrequest" channel="solutionrequests"/> </int:router> <!-- instancerequests processed filter 1 --> <int:channel id="instancerequests"> <int:queue capacity="20"/> </int:channel> <int:service-activator input-channel="instancerequests" ref="instancerequestnamehandler" method="preparename" output-channel="instancerequestsdesc"/> <!-- instancerequestsdesc processed filter 2 --> <int:channel id="instancerequestsdesc"> <int:queue capacity="20"/> </int:channel> <int:service-activator input-channel="instancerequestsdesc" ref="instancerequestdeschandler" method="preparedesc" /> <beans:bean id="instancerequestnamehandler" class="com.trivialjava.rnd.spring_inttest.instancenamerequestprocessor"/> <beans:bean id="instancerequestdeschandler" class="com.trivialjava.rnd.spring_inttest.instancedescrequestprocessor"/> i have request interface, , 2 implementations instancerequest , solutionrequest. can ignore solution request time being.
here instancerequest handlers
public class instancenamerequestprocessor { private final logger logger = loggerfactory.getlogger(instancenamerequestprocessor.class); public string preparename(instancerequest request) { system.out.println(thread.currentthread().getname() + " request name #" + request.getname() ); logger.info(thread.currentthread().getname() + " request name #" + request.getname() ); return request.getdescription(); } } and
public class instancedescrequestprocessor { private final logger logger = loggerfactory.getlogger(instancedescrequestprocessor.class); public string preparedesc(string request){ system.out.println(thread.currentthread().getname() + " request desc #" + request ); logger.info(thread.currentthread().getname() + " request desc #" + request ); return request; } } now when invoking gateway passing instancerequest, first channel instancerequest i.e instancerequests being invoked not second channel i.e instancerequestsdesc. in logs can see messages
13:54:09.077 debug [main][org.springframework.integration.router.expressionevaluatingrouter] channel mappings:{} replaced with:{com.trivialjava.rnd.entity.instancerequest=instancerequests, com.trivialjava.rnd.entity.solutionrequest=solutionrequests} 13:54:15.334 debug [main][org.springframework.integration.channel.queuechannel] presend on channel 'instancerequests', message: genericmessage [payload=com.trivialjava.rnd.entity.instancerequest@632da81b, headers={timestamp=1429898055334, id=6eada370-486c-7ab8-23df-38836782c846, correlationid=b0138751-8154-ff87-b2e2-dc5f8b2381d3, sequencesize=1, sequencenumber=1}] 13:54:15.334 debug [main][org.springframework.integration.channel.queuechannel] postsend (sent=true) on channel 'instancerequests', message: genericmessage [payload=com.trivialjava.rnd.entity.instancerequest@632da81b, headers={timestamp=1429898055334, id=6eada370-486c-7ab8-23df-38836782c846, correlationid=b0138751-8154-ff87-b2e2-dc5f8b2381d3, sequencesize=1, sequencenumber=1}] but there no logs suggests second channel been initialised. have missed something, configuration or known design issue in spring integration.
Comments
Post a Comment