20160909 数据持久化测试

目的

验证没有镜像的情况下队列的持久化和消息的持久化。

环境

实验室环境的 3 台 Rabbit MQ 服务器,已经配置好集群,没有做镜像。

代码相关

5个参数意义分别是:1、队列名 2、重启后是否重建队列 3、是否专有 4、是否自动删除 5、map参数
声明队列:channel.QueueDeclare("Q1", durable(boolean),exclusive(boolean),autoDelete(boolean),null);

MessageProperties.PERSISTENT_TEXT_PLAIN 表示消息为持久化
发布消息:channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, prompt.getBytes());

过程

1 查看集群情况

$ rabbitmqctl cluster_status
Cluster status of node 'rabbit@TK-RABBITMQ3' ...
[{nodes,[{disc,['rabbit@TK-RABBITMQ2','rabbit@TK-RABBITMQ1','rabbit@TK-RABBITMQ3']}]},
 {running_nodes,['rabbit@TK-RABBITMQ1','rabbit@TK-RABBITMQ2','rabbit@TK-RABBITMQ3']},
 {cluster_name,<<"rabbit@TK-RABBITMQ1">>},
 {partitions,[]},
 {alarms,[{'rabbit@TK-RABBITMQ1',[]},{'rabbit@TK-RABBITMQ2',[]},{'rabbit@TK-RABBITMQ3',[]}]}]

2 查看时候已有镜像,有的话删除。

3  使用代码新建一个name为test.1 Node为rabbit@TK-RABBITMQ1的队列,声明队列第二个参数设置为true,发布消息第二个参数设置为MessageProperties.PERSISTENT_TEXT_PLAIN,发送10条消息。
使用代码新建一个name为test.2 Node为rabbit@TK-RABBITMQ1的队列,声明队列第二个参数设置为true,发布消息第二个参数设置为null,发送10条消息。
使用代码新建一个name为test.3 Node为rabbit@TK-RABBITMQ1的队列,声明队列第二个参数设置为false,发布消息第二个参数设置为MessageProperties.PERSISTENT_TEXT_PLAIN,发送10条消息。
使用代码新建一个name为test.4 Node为rabbit@TK-RABBITMQ1的队列,声明队列第二个参数设置为false,发布消息第二个参数设置为null,发送10条消息。

4  查看队列信息

$ rabbitmqctl list_queues name messages_ready durable
Listing queues ...
test.1  10  true
test.4  10  false
test.2  10  true
test.3  10  false

5 停掉 TK-RABBITMQ1 节点


$ rabbitmqctl stop_app
Stopping node 'rabbit@TK-RABBITMQ1' ...

6 此时再用 rabbitmqctl start_app 命令启动

7 查看队列情况

$ rabbitmqctl list_queues name messages_ready durable
Listing queues ...
test.1  10   true
test.2  0    true  

此时发现声明队列的第二个参数设置为为 false 的队列全部不存在了,发布消息第二个参数设置为null的消息全部丢失。

结论

       想要持久化消息至少需要如下设置

  • 声明队列 durable 参数为true
    channel.QueueDeclare("Q1", durable(boolean),exclusive(boolean),autoDelete(boolean),null);
  • 发布消息Delivery Mode 设置成2,也就是第三个参数设置为 MessageProperties.PERSISTENT_TEXT_PLAIN
    channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, prompt.getBytes());

 

更多实验可点击:Rabbitmq 实验

转载于:https://my.oschina.net/u/3568300/blog/3005620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值