Spring集成-如何处理来自LoggingHandler的异常



我一直致力于Spring集成文件支持,我需要将文件从输入目录移动到输出目录。成功地将其移动到输出目录后,应该将其归档,然后从输入目录中删除。我使用下面的配置来实现这一点。

如果我的配置可以更好,请纠正我。

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"/>

我在服务激活器中有代码,如果存档目录不可用,它应该终止应用程序。因此,在运行应用程序时,在第一次移动文件之后,我删除了存档目录。然后我将新文件放在输入目录中,该文件被轮询并发送到通道,但服务激活器处理程序没有被拾取,也没有检查存档目录是否存在。

我从日志中发现消息第一次被发送到ServiceActivatorHandler并移动了文件,但第二次消息被发送到LoggingHandler。

2016-09-30 14:27:36,593 [task-scheduler-1] [file.FileReadingMessageSource] INFO  - Created message: [GenericMessage [payload=c:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesoutputtest1.txt, headers={file_originalFile=c:tmpcsvfilesinputtest1.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:tmpcsvfilesoutputtest1.txt, headers={file_originalFile=c:tmpcsvfilesinputtest1.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:tmpcsvfilesoutput
2016-09-30 14:27:36,702 [task-scheduler-1] [handlers.FileHandler] INFO  - c:tmpcsvfilesarchive
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:tmpcsvfilesinputtest1.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:tmpcsvfilesoutputtest1.txt, headers={file_originalFile=c:tmpcsvfilesinputtest1.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:tmpcsvfilesoutputtest1.txt, headers={file_originalFile=c:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest1.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:tmpcsvfilesinputtest2.txt]
2016-09-30 14:28:05,248 [task-scheduler-3] [file.FileReadingMessageSource] INFO  - Created message: [GenericMessage [payload=c:tmpcsvfilesinputtest2.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:tmpcsvfilesinputtest2.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:tmpcsvfilesinputtest2.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:tmpcsvfilesinputtest2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]
2016-09-30 14:28:05,263 [task-scheduler-3] [handler.LoggingHandler] DEBUG - c:tmpcsvfilesinputtest2.txt
2016-09-30 14:28:05,279 [task-scheduler-3] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'inboundFileChannel', message: GenericMessage [payload=c:tmpcsvfilesinputtest2.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'

由于我删除了存档目录(当应用程序正在运行时),消息被发送到LoggingHandler。谁能建议如何处理这个异常,我可以写代码来终止应用程序。

如果我遗漏了什么,请纠正我。

<int:channel id="inboundFileChannel"/>
<int:service-activator input-channel="inboundFileChannel" output-channel="outboundFileChannel" ref="fileHandler"/>
<int:logging-channel-adapter channel="inboundFileChannel" level="DEBUG"/>

当您有两个消费者订阅了相同的通道(默认为DirectChannel)时,消息将交替地发送给这两个消费者-轮循分发。

如果您希望文件同时发送给两个消费者,请将其更改为pub/sub通道。

<int:publish-subscribe-channel id="inboundFileChannel"/>

最新更新