Spring JMS侦听器确认

问题描述 投票:0回答:1

我正在使用JMS从IBM MQ消息代理发送接收消息。我目前正在处理侦听器服务,抛出未处理的异常消息并发送了消息无需确认就返回队列。我希望该服务重试可配置的时间并抛出该异常,这意味着侦听器服务不可用的完整异常消息。

我的监听器和容器工厂如下所示。

@JmsListener(destination = "testqueue", containerFactory = "queuejmsfactory")
public void consumer(String message) throws JMSException 
{ handle(message); }

@Bean(name = "queuejmsfactory") public JmsListenerContainerFactory getQueueTopicFactory(ConnectionFactory con , 
DefaultJmsListenerContainerFactoryConfigurer config) 
{ DefaultJmsListenerContainerFactory d = new DefaultJmsListenerContainerFactory(); 
d.setSessionTransacted(true); 
d.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE); 
config.configure(d,con); 
return d; }

简而言之,我有一个使用SessionawareMessageListener onMessage的现有代码,我正在尝试复制到@JmsListener。我如何自动处理会话提交和回滚,以及如果必须像onMessage一样手动处理,如何在JmsListener中获取会话。

@Override
public void onMessage(Mesage mes, Session ses) throws JMSException 
{ try 
{ TestMessage txtMessage = (TextMessage)message; 
handle(txtMessage); ses.commit(); 
} catch (Exception exp) 
{ if (shouldRollback(message))
{ ses.rollback();} 
else{logger,warn("moved to dlq"); 
ses.commit(); 
} 
} }

private boolean shouldRollback(Message mes) throws JMSException 
{ int rollbackcount = mes.getIntProperty("JMSXDeliveryCount"); 
return (rollbackcount <= maxRollBackCountFromApplication.properties)
}
spring-boot jms spring-jms
1个回答
0
投票

您可以将Session作为另一个参数添加到JmsListener方法。

© www.soinside.com 2019 - 2024. All rights reserved.