gpt4 book ai didi

java - 收听 jms 主题时删除消息

转载 作者:行者123 更新时间:2023-12-01 13:59:36 31 4
gpt4 key购买 nike

我正在使用如下定义的 spring jms 监听器。它通常工作正常,但我看到它根据 recieveTimeout 设置不断断开连接和重新连接。

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<!-- mrgm connection to the jca adapter -->
<property name="connectionFactory" ref="mrgmConnectionFactory" />
<!-- name of the topic -->
<property name="destinationName" value="test.destinationname" />
<!-- class which will listen for messages (must implement javax.jms.MessageListener -->
<property name="messageListener" ref="TestListener" />
<property name="sessionTransacted" value="true" />
<property name="receiveTimeout" value="1000" />
<!--turning this on drops all messages -->
<!-- <property name="pubSubDomain" value="true" /> -->

</bean>

我做了一些测试,当有很多消息被发布到主题时,它会丢弃一些,因为如果消息是在断开连接和重新连接之间的一小段时间内出现的,听众显然会错过它。

如果我将 recieveTimeout 设置为 0,这个问题就会消失。在收听某个主题时,我应该始终将 recieveTimeout 设置为 0 吗?还是我以错误的方式处理了整个过程。

最佳答案

断开连接和重新连接时,如果您的订阅者不耐用,您可能会丢失消息。但是, Spring DMLC 不应重新连接。你能再解决一下吗?它基本上应该订阅一个主题 session.createConsumer(..) 然后循环 consumer.receive()consumer.receive(timeout)。不确定为什么在将超时设置得更高时您的 DMLC 会重新连接。

虽然没有超时你应该没问题,但你可能想跟踪原因以重新连接调试日志记录等。

关于java - 收听 jms 主题时删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12114462/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com