【发布时间】:2022-01-12 23:00:28
【问题描述】:
当我尝试关闭我的 spring 集成过程时,使用入站 Jms.messageDrivenChannelAdapter 的流程会引发以下错误消息:
“org.springframework.jms.listener.DefaultMessageListenerContainer - 由于监听器容器同时被停止而拒绝接收到的消息”
我的入站适配器定义如下:
Jms.messageDrivenChannelAdapter(
Jms.container(jmsConnectionFactory, destinationName)
.concurrency(highConcurrency)
.get()
)
我相信我的问题是我的 jms 容器上的默认“receiveTimeout”太小了,我需要增加该值以满足我的“高并发”(对吗?),因为“receiveTimeout”似乎是容器“doShutdown”方法关心的唯一值。
现在,receiveTimeout 属性的源代码显示“此值需要小于事务超时”。此外,关于入站 jms 适配器的 spring-integration doco 说“如果您希望整个流程是事务性的 [...] 考虑使用一个 jms-message-driven-channel-adapter 并将确认设置为事务(默认)”,其中似乎暗示 jms 适配器默认是事务性的。
因此,我的主要问题是:即使我没有使用任何显式事务管理器,我是否不仅需要在我的容器上显式设置“receiveTimeout”,还需要使用 transactionTimeout > receiveTimeout 设置“transactionTimeout”?
非常感谢您的专业知识和时间。
最好的问候
【问题讨论】:
标签: spring-integration spring-jms