前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMq持久化

RabbitMq持久化

作者头像
写一点笔记
发布2022-08-11 15:56:06
3570
发布2022-08-11 15:56:06
举报
文章被收录于专栏:程序员备忘录程序员备忘录

持久化就是防止异常情况下的数据丢失,提高rabbitmq的可靠性。这里的异常主要说的就是重启,关闭,宕机等。根据我们近期学习的rabbitmq中有关消息的概念来说,消息要经过交换器、队列。因此我们的持久化就是针对交换器、队列和消息本身的。

1.交换器的持久化

对于经常使用的交换器来说,我们可以将交换器声明为durable参数为true,如果不声明,那么rabbitmq重启之后。相关的交换器元数据会丢失,但是消息不会丢失,只是消息不能发送到这个交换器中了。所以对于长久使用的交换器来说,我们最好设置其为持久化的。

代码语言:javascript
复制
 @Bean
 public DirectExchange exchangeA() {
     Map map=new HashMap<>();
     //第二个参数就是是否持久化
     return new DirectExchange("A",true,false,map);
 }

2.队列持久化

保证其数据本身的元数据不因异常而丢失,但是并不能保证内部所存储消息不会丢失。

代码语言:javascript
复制
@Bean
public Queue directTwoQueue() 
   Map map=new HashMap<>();
   //第二个参数为是否持久化
   return new Queue("EEE",true,false,false,map);
}

3.消息的持久化

要确保消息不会丢失,就需要将其设置为持久化的。在之前我们学习过deliveryMode,其值为2的时候表示消息持久化,1表示非持久化。

代码语言:javascript
复制
byte[] body = JSON.toJSONBytes(message, SerializeConfig.globalInstance);
MessageProperties messageProperties = new MessageProperties();
messageProperties.setMessageId(UUID.randomUUID().toString());
messageProperties.setContentType(MediaType.APPLICATION_JSON_VALUE);
//设置消息持久化
messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);
return new Message(body, messageProperties);

综合上述,严密的消息消息服务都应该设置持久化,持久化的顶层是消息的持久化,底层是队列持久化和交换器持久化,如果底层非持久化,那么上层持久化就没有什么意义!但是设置持久化必然对系统的性能有所影响。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 写点笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档