栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用JmsTemplate进行手动确认并从Rabbitmq队列中删除消息

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用JmsTemplate进行手动确认并从Rabbitmq队列中删除消息

您没有使用

JmsTemplate
,而是使用
SimpleMessageListenerContainer
来接收消息。

如果您 使用模板,你将不得不使用的

execute
方法有
SessionCallback
,因为必须确认其内接收消息的会话的范围内。

但是,使用

SimpleMessageListenerContainer
,您只需将设置
sessionAcknowledgeMode
Session.CLIENT_ACKNOWLEDGE
。参见容器javadocs

/** * Message listener container that uses the plain JMS client API's * {@pre MessageConsumer.setMessageListener()} method to * create concurrent MessageConsumers for the specified listeners. * * <p>This is the simplest form of a message listener container. * It creates a fixed number of JMS Sessions to invoke the listener, * not allowing for dynamic adaptation to runtime demands. Its main * advantage is its low level of complexity and the minimum requirements * on the JMS provider: Not even the ServerSessionPool facility is required. * * <p>See the {@link AbstractMessageListenerContainer} javadoc for details * on acknowledge modes and transaction options. Note that this container * exposes standard JMS behavior for the default "AUTO_ACKNOWLEDGE" mode: * that is, automatic message acknowledgment after listener execution, * with no redelivery in case of a user exception thrown but potential * redelivery in case of the JVM dying during listener execution. * * <p>For a different style of MessageListener handling, through looped * {@pre MessageConsumer.receive()} calls that also allow for * transactional reception of messages (registering them with XA transactions), * see {@link DefaultMessageListenerContainer}.   ...

编辑

使用时

JmsTemplate
,您必须在会话范围内进行工作-这是…

首先,您必须在模板中启用客户端确认…

this.jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);

然后,将

execute
方法与
SessionCallback
…一起使用

Boolean result = this.jmsTemplate.execute(session -> {    MessageConsumer consumer = session.createConsumer( this.jmsTemplate.getDestinationResolver().resolveDestinationName(session, "bar", false));    String result = null;    try {        Message received = consumer.receive(5000);        if (received != null) { result = (String) this.jmsTemplate.getMessageConverter().fromMessage(received); // Do some stuff here. received.acknowledge(); return true;        }    }    catch (Exception e) {        return false;    }    finally {        consumer.close();    }}, true);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号