gpt4 book ai didi

spring JMS 错误处理程序未调用

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

我有如下 Spring JMS 消息监听器容器设置。

    <beans:bean id="messageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">     
<beans:property name="connectionFactory" ref="amqConnectionFactory" />
<beans:property name="destination" ref="request.Queue" />
<beans:property name="messageListener" ref="messageListener" />
<beans:property name="sessionTransacted" value="true" />
<beans:property name="errorHandler" ref="inboundErrorHandler"/>
</beans:bean>

<beans:bean id="inboundErrorHandler" class="com.test.exception.MDPErrorHandler" />

监听器代码如下..
@Component
public class MyMessageListener implements MessageListener {

private static final Log LOG = LogFactory.getLogger(MyMessageListener.class);

@Autowired
private MessageHandler handler;

/**
* @see MessageListener#onMessage(Message)
*/
@Override
public void onMessage(Message inMessage) {

try
{
if (inMessage instanceof TextMessage) {
TextMessage msg = (TextMessage) inMessage;
handler.processRequest(msg.getText());
} else {
LOG.error("Message of wrong type: " + inMessage.getClass().getName());
}

} catch (Exception cause) {
LOG.error("Error while receiving message in MlaMessageListener.onMesage() ",cause);
}
}

}

我的错误处理程序如下..
public class MDPErrorHandler implements ErrorHandler {
/**
* @see org.springframework.util.ErrorHandler#handleError(java.lang.Throwable)
*/
@Override
public void handleError(Throwable t) {
LOG.warn("Inside MDPErrorHandler.handleError()*** ");
t.printStackTrace();
}
}

如果 messageListener.onMessage() 中发生任何异常/错误,为什么我的错误处理程序不会自动调用?

我需要手动调用它吗?

最佳答案

您不需要像那样配置容器。

只需向入站适配器添加一个错误 channel ;当主流程(incomingUpdateChannel->)发生异常时,错误消息将被发送到错误 channel 。该消息的有效负载将是一个 MessagingException,您可以提取失败的消息以尝试发送到您的失败队列。只需添加一个转换器 (expresssion="payload.failedMessage"),然后是一个 jms 出站适配器。如果发送成功,则原始事务将提交。如果错误 channel 流抛出异常,原始消息将被回滚。

关于spring JMS 错误处理程序未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772933/

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