gpt4 book ai didi

Spring JMS - 通过将消息发送回同一队列而不是回滚事务来重新传递

转载 作者:行者123 更新时间:2023-12-02 03:40:30 24 4
gpt4 key购买 nike

这是我在这里的第一篇文章,所以如果我不遵守格式规则或
其他一般规则。

我有一个基于 Spring JMS 的客户端应用程序,它使用多个消费者从队列中读取。
我的限制是:保证在失败和消息重复检测的情况下重新传递。

Spring 配置

<bean id="jndiDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver" />


<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="MyConnectionFactory" />
<property name="destinationResolver" ref="jndiDestinationResolver" />
<property name="receiveTimeout" value="100" />
</bean>


<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="destinationResolver" ref="jndiDestinationResolver" />
<property name="connectionFactory" ref="MyConnectionFactory" />
<property name="destinationName" value="my_Queue" />
<property name="messageListener" ref="MyListener" />
<property name="maxConcurrentConsumers" value="10"/>
<property name="sessionTransacted" value="true"/>
</bean>

我的监听器代码类似于:

protected 无效进程文本消息(文本消息文本消息){
尝试 {
//处理消息
} 捕捉(异常 e){
尝试 {
sendTextMessage("my_Queue",correlationID, textMessage.getText());
} 捕捉(JMSException e1){
log.error("写回队列时出错!");
抛出 JmsUtils.convertJmsAccessException(e1);

}
}
}

protected void sendTextMessage(String queueName, final byte[] correlationID, String message) {
jmsTemplate.convertAndSend(queueName, message, new MessagePostProcessor() {
公共(public)消息 postProcessMessage(消息消息)抛出 JMSException {
message.setJMSCorrelationIDAsBytes(correlationID);
返回消息;
}
});
}

我使用 ActiveMQ 进行了一些本地故障测试,并且重新发送没问题(我注意到重新传递的标志为 false)。
我还尝试在处理过程中粗暴地停止应用程序服务器,并且能够检查那一刻队列包含 1 条消息,redelivered=true。

这是实现我的目标的正确方法吗?

我希望这对于我将使用的 JMS 提供程序是透明的(在生产环境中使用 Websphere MQ)。
目前我想通过抛出异常来避免回滚事务:我希望重新安排我失败的消息,就像队列中的新消息一样。
对于重复检测,我认为插入业务存在检查就足够了。

提前致谢并致以最诚挚的问候

最佳答案

是的,这是正确的做法。

关于Spring JMS - 通过将消息发送回同一队列而不是回滚事务来重新传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373128/

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