我有一个主要运行的集成应用程序,但昨天注意到一条消息丢失了。当时,服务激活器端点非常忙于处理先前的消息。
基本上,我的整合流程是: jdbc:inbound-channel-adapter - >分离器 - >聚合器(基于类型字段) - > [可调整频道] - >服务活化剂
从日志中,我可以看到一组消息被轮询,拆分,聚合,过期(通过消息存储收割机),并放置在创建通道上。日志中有一个preSend和postSend事件,用于将消息放在creationChannel上,但这就是它的结束。它永远不会到达我的服务激活器,jdbc消息存储库中没有消息,我也没有看到任何错误。
我是如何配置服务激活器或轮询器(或组合)的?
以下是适用于该问题的配置。
<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" />
答案 0 :(得分:0)
首先,您应将<poller>
标记为<transactional>
。
另一个点切换org.springframework.integration
DEBUG日志记录级别,并在消息丢失时显示日志。