Activemq 尝试停止消息驱动的通道适配器,但丢弃消息

Activemq 尝试停止消息驱动的通道适配器,但丢弃消息,activemq,spring-integration,Activemq,Spring Integration,我正在尝试使用SmartLifecyclestop方法停止消息驱动的频道适配器,但可能有三分之一的时间,这会导致警告消息: DefaultMessageListenerContainer-拒绝接收到的消息,因为侦听器容器在此期间已停止 检查ActiveMQ表明消息确实已丢失 我正在使用JmsTemplate让ActiveMQ与Spring集成对话。我的豆子看起来像: <bean id="Topic" class="org.apache.activemq.command.ActiveMQQu

我正在尝试使用
SmartLifecycle
stop
方法停止
消息驱动的频道适配器
,但可能有三分之一的时间,这会导致警告消息:

DefaultMessageListenerContainer-拒绝接收到的消息,因为侦听器容器在此期间已停止

检查ActiveMQ表明消息确实已丢失

我正在使用
JmsTemplate
让ActiveMQ与Spring集成对话。我的豆子看起来像:

<bean id="Topic" class="org.apache.activemq.command.ActiveMQQueue">...</bean>
<bean id="archiveTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="defaultDestination" ref="Topic"></property>
    ...
</bean>
<si:channel id="InputChannel" />
<jms:message-driven-channel-adapter
    id="archiveInboundAdapter" channel="InputChannel" destination="Topic" />
<si:service-activator id="archiveConsumerActivator"
    input-channel="InputChannel" ref="consumer" method="onMessage" />
。。。
...
然后在我的代码中,我获取
archiveInboundAdapter
bean并对其调用
stop()

有什么想法吗?有没有更好的方法停止接收消息?实际上,我正试图以有序的方式处理系统的关闭(停止接收消息,停止处理这些消息的复杂线程系统,退出)。

设置
acknowledge=“transact”
,以便将正在运行的消息回滚到队列上