我已经设置了一个应用程序来监听ActiveMQ主题。这是我配置它的方式:
<jms:listener-container connection-factory="jmsFactory"
container-type="default" destination-type="durableTopic" client-id="CMY-LISTENER"
acknowledge="transacted">
<jms:listener destination="CMY.UPDATES"
ref="continuingStudiesCourseUpdateListener" subscription="CMY-LISTENER" />
</jms:listener-container>
<bean id="jmsFactoryDelegate" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${jmsFactory.brokerURL}" />
<property name="redeliveryPolicy">
<bean class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="10" />
<property name="initialRedeliveryDelay" value="60000" />
<property name="redeliveryDelay" value="60000" />
<property name="useExponentialBackOff" value="true" />
<property name="backOffMultiplier" value="2" />
</bean>
</property>
</bean>
我遇到的问题是:
我在主题中添加了10条消息。
如果读取了第一条消息,并且应用程序无法处理该任务,则会回滚该消息。
1分钟后,它重试读取第一条消息并进行处理。它失败并回滚。
2分钟后,它重试,然后回滚。
4分钟后......等等它会卡在第一条消息上,接下来的9条消息在第一条消息被处理之后才会被读取。
这是主题应该如何运作的方式吗?有没有一种方法可以在第一个等待重新尝试时读取其他9条消息?
答案 0 :(得分:2)
它的工作就像它应该的那样,这是事务性消息处理的本质。根据给定的重新传递策略中的规则,您无法处理其他消息,直到第一个消息完成或被丢弃。
可能希望阅读JMS教程here: