RabbitMQ消息持久化

消息持久化

如何保障RabbitMQ 服务停掉以后消息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时,会忽视队列和消息,除非告知它不要这样做。确保消息不会丢失需要做两件事:需要将队列和消息都标记为持久化。

一、队列持久化

创建的队列如果是非持久化的,如果rabbitmq重启队列就会被删除。
如果需要持久化只要把durable设置为true就可以把队列持久化了。

Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                             Map<String, Object> arguments) throws IOException;

以上代码在声明队列时只要将第二个参数改为true即可。

在修改时,如果队列之前不是持久化的队列,在将参数durable设置为true后会出现错误。
在这里插入图片描述

需要将队列删除才能继续设置
进入到管理界面 http://localhost:15672/#/
在这里插入图片描述
‘选择Queue
选择要删除的队列
在这里插入图片描述
重新创建队列

// 声明一个持久队列
String queueName = "myQueue";
boolean durable = true;//队列持久化
boolean exclusive = false;
boolean autoDelete = false;
Map<String, Object> arguments = null; // 如果不需要额外的参数,可以设置为null

Queue.DeclareOk queueDeclareOk = channel.queueDeclare(queueName, durable, exclusive, autoDelete, arguments);


“D”表示是持久化队列
在这里插入图片描述

二、消息持久化

在生产者代码中设置如下属性

MessageProperties.PERSISTENT_TEXT_PLAIN
channel.basicPublish("",QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN,messageC1.getBytes());

```java

exchange:交换机名称。如果为空字符串(“”),则表示使用默认交换机。默认交换机是一个特殊的交换机,没有名称,你不需要显式地声明它。
routingKey:路由键。这是消息选择队列的关键字。如果交换机和队列之间有绑定,并且绑定的路由键与这里提供的路由键相匹配,那么消息将被投递到对应的队列中。QUEUE_NAME是你为队列定义的名称,通常情况下,队列名称就是路由键。
basicProperties:消息属性。这些属性可以指定消息的持久性、消息的优先级、内容类型等。MessageProperties.PERSISTENT_TEXT_PLAIN是表示消息是持久的
body:消息体。这是要发送的消息的实际内容。在这里,messageC1.getBytes()表示将messageC1对象转换为字节数组,以便作为消息体发送。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值