Reputation: 458
I have been working on Spring Integration File Support where I need to move file from input directory to output directory. After it is successfully moved to output directory it should be archived and then deleted from the input directory. I am using the below configuration to achieve this.
Please correct me if my configuration can be better way.
Spring Integration Configuration:
<int:channel id="inboundFileChannel"/>
<int:channel id="outboundFileChannel"/>
<int:channel id="archiveFileChannel"/>
<int-file:inbound-channel-adapter channel="inboundFileChannel"
directory="file://${file.input.dir}" filename-pattern="*.txt" auto-startup="true" auto-create-directory="false">
<int:poller fixed-rate="${file.poller.interval}"/>
</int-file:inbound-channel-adapter>
<int:service-activator input-channel="inboundFileChannel" output-channel="outboundFileChannel" ref="fileHandler"/>
<int-file:outbound-gateway request-channel="outboundFileChannel" reply-channel ="archiveFileChannel" directory="file://${file.output.dir}"
mode="REPLACE" delete-source-files="false" auto-create-directory="false" />
<int:service-activator input-channel="archiveFileChannel" ref="archiveFileHandler" method="copyToArchiveDirectory"/>
<int:logging-channel-adapter channel="inboundFileChannel" level="DEBUG"/>
<bean id="fileHandler" class="FileHandler"/>
<bean id="archiveFileHandler" class="ArchiveFileHandler"/>
I have code in service activator if archive directory is not available it should terminate the application. So while running the application , after the first time the file is moved I have deleted the archive directory. then i placed new file in input directory and the file is polled and sent to a channel but the service activator handler is not picked up and does not check for archive directory exists or not.
I have found out from the logs that the message is sent to the ServiceActivatorHandler for the first time and moved the file but for the second time message is sent to LoggingHandler.
2016-09-30 14:27:36,593 [task-scheduler-1] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}]]
2016-09-30 14:27:36,593 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}]
2016-09-30 14:27:36,593 [task-scheduler-1] [channel.DirectChannel] DEBUG - preSend on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}]
2016-09-30 14:27:36,624 [task-scheduler-1] [handler.ServiceActivatingHandler] DEBUG - ServiceActivator for [org.springframework.integration.handler.MethodInvokingMessageProcessor@3d1024ab] received message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}]
2016-09-30 14:27:36,640 [task-scheduler-1] [handlers.FileHandler] INFO - File : c:\tmp\csvfiles\input\test1.txt is copied to : c:/tmp/csvfiles/output/
2016-09-30 14:27:36,640 [task-scheduler-1] [channel.DirectChannel] DEBUG - preSend on channel 'outboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=f53fbb89-d2f2-caab-f40b-cbd825238950, timestamp=1475263656640}]
2016-09-30 14:27:36,640 [task-scheduler-1] [file.FileWritingMessageHandler] DEBUG - org.springframework.integration.file.FileWritingMessageHandler@310cd27 received message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=f53fbb89-d2f2-caab-f40b-cbd825238950, timestamp=1475263656640}]
2016-09-30 14:27:36,671 [task-scheduler-1] [channel.DirectChannel] DEBUG - preSend on channel 'archiveFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}]
2016-09-30 14:27:36,671 [task-scheduler-1] [handler.ServiceActivatingHandler] DEBUG - ServiceActivator for [org.springframework.integration.handler.MethodInvokingMessageProcessor@5f6b71ba] received message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}]
2016-09-30 14:27:36,671 [task-scheduler-1] [handlers.FileHandler] INFO - Service Activator Activated
2016-09-30 14:27:36,671 [task-scheduler-1] [handlers.FileHandler] INFO - File name : test1.txt
2016-09-30 14:27:36,702 [task-scheduler-1] [utility.FileUtility] INFO - Archive file name : test1_2016-09-30_14-27-36-702.txt
2016-09-30 14:27:36,702 [task-scheduler-1] [handlers.FileHandler] INFO - c:\tmp\csvfiles\output
2016-09-30 14:27:36,702 [task-scheduler-1] [handlers.FileHandler] INFO - c:\tmp\csvfiles\archive
2016-09-30 14:27:36,718 [task-scheduler-1] [handlers.FileHandler] INFO - Successfully archived file : test1.txt
2016-09-30 14:27:36,718 [task-scheduler-1] [handlers.FileHandler] INFO - Source FIle Name with Path : c:\tmp\csvfiles\input\test1.txt
2016-09-30 14:27:36,718 [task-scheduler-1] [handlers.FileHandler] INFO - Successfully deleted file : test1.txtfrom directory: c:/tmp/csvfiles/input/
2016-09-30 14:27:36,718 [task-scheduler-1] [handler.ServiceActivatingHandler] DEBUG - handler 'ServiceActivator for [org.springframework.integration.handler.MethodInvokingMessageProcessor@5f6b71ba]' produced no reply for request Message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}]
2016-09-30 14:27:36,718 [task-scheduler-1] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'archiveFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}]
2016-09-30 14:27:36,718 [task-scheduler-1] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'outboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=f53fbb89-d2f2-caab-f40b-cbd825238950, timestamp=1475263656640}]
2016-09-30 14:27:36,718 [task-scheduler-1] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}]
2016-09-30 14:27:36,718 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:37,250 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:38,248 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:39,250 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:40,249 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:41,247 [task-scheduler-4] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:42,246 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:43,244 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:44,242 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:45,241 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:46,239 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:47,238 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:48,252 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:49,239 [task-scheduler-8] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:50,241 [task-scheduler-8] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:51,239 [task-scheduler-8] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:52,209 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:53,278 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:54,247 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:55,245 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:56,252 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:57,238 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:58,253 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:27:59,238 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:00,252 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:01,249 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:02,249 [task-scheduler-10] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:03,247 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:04,249 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:05,248 [task-scheduler-3] [file.FileReadingMessageSource] DEBUG - Added to queue: [c:\tmp\csvfiles\input\test2.txt]
2016-09-30 14:28:05,248 [task-scheduler-3] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]]
2016-09-30 14:28:05,248 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]
2016-09-30 14:28:05,248 [task-scheduler-3] [channel.DirectChannel] DEBUG - preSend on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]
2016-09-30 14:28:05,248 [task-scheduler-3] [handler.LoggingHandler] DEBUG - org.springframework.integration.handler.LoggingHandler#0 received message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]
2016-09-30 14:28:05,263 [task-scheduler-3] [handler.LoggingHandler] DEBUG - c:\tmp\csvfiles\input\test2.txt
2016-09-30 14:28:05,279 [task-scheduler-3] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]
2016-09-30 14:28:06,246 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:07,248 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:08,232 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:09,261 [task-scheduler-9] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
2016-09-30 14:28:10,244 [task-scheduler-9] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false'
Since I deleted the archive directory(while application is running), message is sent to LoggingHandler. Can anybody suggest how to handle that exception and i can write code to terminate the application.
Please correct me if I am missing any thing.
Upvotes: 0
Views: 569
Reputation: 174554
<int:channel id="inboundFileChannel"/>
<int:service-activator input-channel="inboundFileChannel" output-channel="outboundFileChannel" ref="fileHandler"/>
<int:logging-channel-adapter channel="inboundFileChannel" level="DEBUG"/>
When you have two consumers subscribed to the same channel (DirectChannel
by default) messages will go to the two consumers alternately - round-robin distribution.
If you want the file to go to both consumers, change it to a pub/sub channel.
<int:publish-subscribe-channel id="inboundFileChannel"/>
Upvotes: 1