如何使用spring-rabbitmq将消息标记为持久?

Posted

技术标签:

【中文标题】如何使用spring-rabbitmq将消息标记为持久?【英文标题】:how to mark a message as persistent using spring-rabbitmq? 【发布时间】:2016-11-07 11:06:18 【问题描述】:

这就是我创建交换并将队列绑定到它的方式

<rabbit:topic-exchange id="dataExchange" name="MQ-EXCHANGE" durable="true">
        <rabbit:bindings>
            <rabbit:binding queue="COMM_QUEUE" pattern="queue.*" />
        </rabbit:bindings>
</rabbit:topic-exchange>

我在 Internet 上阅读了很多帖子,其中写道,如果要在 rabbitmq 或队列崩溃的情况下保护消息,还需要将消息标记为持久。但我不知道如何将我的消息标记为持久。

这就是我将消息发布到队列的方式

    @Autowired
    private RabbitTemplate template;

    @Override
    public void produceMessage(Object message, String routingKey) 
        template.convertAndSend(routingKey, message);  
    

我寻找不同的 API 方法来了解这一点,并尝试寻找我可以在 XML 中配置但找不到方法的任何特定属性。有什么指导吗?

【问题讨论】:

【参考方案1】:

默认交付模式(MessagePropertiesPERSISTENT。见here。

要使其非持久化,您需要使用带有MessagePostProcessorconvertAndSend(...) 方法来设置deliveryMode 属性。

【讨论】:

以上是关于如何使用spring-rabbitmq将消息标记为持久?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Quickblox 中为已读消息集成标记消息功能

如何在使用 WCF 的事务性 MSMQ 中将消息显式标记为中毒

Cassandra 错误消息:由于本地暂停,未将节点标记为关闭。为啥?

Firebase 控制台中的通知渠道不会将消息标记为“已打开”,即使消息已传递并打开也是如此

当用户关闭浏览器或选项卡而不注销时如何将用户标记为离线

imaplib/gmail 如何在不标记为已读的情况下下载完整消息(所有部分)[重复]