人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 本篇是消息队列RabbitMQ的第四弹. RabbitMQ我已经写了三篇了,基础的收发消息和基础的概念我都已经写了,学任何东西都是这样,先基础的上手能用,然后遇到问题再去解决,无法理解就去深入源码,随着时间的积累对这一门技术的理解也会随之提高. 基础操作已经熟练后,相信大家不可避免的会生出向那更高处攀登的心来,今天我就罗列一些RabbitMQ比较高级的用法,有些用得到有些用不上,但是一定要有所了解,因为大部分情况我们都是面向面试学习~…
继续上篇文章解决RabbitMQ消息丢失问题和保证消息可靠性(一) 未完成部分,我们聊聊MQ Server端的高可用和消费端如何保证消息不丢的问题? 回归上篇的内容,我们知道消息从生产端到服务端,为了保证消息不丢,我们必须做哪些事情? 发送端采用Confirm模式,注意Server端没成功通知发送端,需要重发操作需要额外处理 消息的持久化处理 上面两个操作保证消息到服务端不丢,但是非高可用状态,如果节点挂掉,服务暂时不可用,需要重启后,消息恢复,消息不会丢失,因为有磁盘存储. 本文先从消费端讲起…
原文链接(作者一个人):https://juejin.im/post/5d468591f265da03b810427e 工作中经常用到消息中间件来解决系统间的解耦问题或者高并发消峰问题,但是消息的可靠性如何保证一直是个很大的问题,什么情况下消息就不见了?如何防止消息丢失?下面通过这篇文章,我们就聊聊RabbitMQ 消息可靠性如何解决的? 本文分三部分说明 RabbitMQ 消息丢失场景有哪些? 如何避免消息丢失? 如何设计部署消息中间件保证消息可靠性? RabbitMQ 消息丢失场景有哪些?…
目录 生产者丢失消息 代码模拟 事务 confirm模式确实 数据退回监听 MQ事务相关软文推荐 MQ丢失信息 消费者丢失信息 之前我们简单介绍了rabbitmq的功能.他的作用就是方便我们的消息解耦.紧接着问题就会暴露出来.解耦就设计到双方系统不稳定问题.在mq中有生产者.mq.消费者三个角色.其中一个角色down机或者重启后.就设计到消息的丢失问题. 因为MQ整个消息周期设计到上述的三个角色,所以我们从这个三个角色开始讨论丢失数据的情况.并如何解决 生产者丢失消息 在生产数据程序中,消息已经…
1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 在以上两篇博客发布后不久,有细心的网友就评论,创建的队列和发送的消息,如果在没有启动消费者程序的时候,重启了RabbitMQ服务,队列和消息都丢失了. 这就引出了一个非常重要的问题,也是面试中经常会问的:在使用RabbitMQ时,如何保证消息最大程度的不丢失并且被正确消费? 2. 本篇概要 RabbitMQ针对这个问题…
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.作为一名合格的开发者,有必要了解一下相关知识,RabbitMQ(一)已经入门RabbitMQ,本文介绍RabbitMQ的高级特性. 过期时间(TTL) Time To Live,也就是生存时间,是一条消息在队列中的最大存活时间,单位是毫秒.了解Redis的朋友应该一看就明白,二者很像. RabbitMQ可以对消息和队列设置TTL. RabbitMQ支持设置消息的过期时间,在消息发送的时候可以进行指定,每条消…
一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失. 一 消息生产者没有把消息成功发送到MQ 1.1 事务机制 AMQP协议提供了事务机制,在投递消息时开启事务支持,如果消息投递失败,则回滚事务. 自定义事务管理器 @Configuration public class RabbitTranscation { @Bean public RabbitTransactionManager rabbitTransactionManager(ConnectionF…
人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 本篇是消息队列RabbitMQ的第五弹. 上篇本来打算讲述RabbitMQ的一些高级用法: 如何保证消息的可靠性? 消息队列如何进行限流? 如何设置延时队列进行延时消费? 最终因为篇幅缘故,上篇只讲了如何保证消息的可靠性?,本篇将会把剩下两个讲完,本篇也可能是RabbitMQ系列的最后一篇了~ 我所讲的知识点在工作中基本上也够用了,希望大家好好消化. 旧坑填上之后可能会慢慢开新坑了,同时因为现在到九月中旬这段时间我有一场考试需要筹备,…
有很多人问过我这么一类问题:RabbitMQ如何确保消息可靠?很多时候,笔者的回答都是:说来话长的事情何来长话短说.的确,要确保消息可靠不只是单单几句就能够叙述明白的,包括Kafka也是如此.可靠并不是一个绝对的概念,曾经有人也留言说过类似全部磁盘损毁也会导致消息丢失,笔者戏答:还有机房被炸了也会导致消息丢失.可靠性是一个相对的概念,在条件合理的范围内系统所能确保的多少个9的可靠性.一切尽可能的趋于完美而无法企及于完美. 我们可以尽可能的确保RabbitMQ的消息可靠.在详细论述RabbitMQ…
RabbitMQ流程简介(带Exchange) RabbitMQ使用一些机制来保证可靠性,如持久化.消费确认及发布确认等. 先看以下这个图: P为生产者,X为中转站(Exchange),红色部分为消息队列,C1.C2为消费者. 整个流程分成三部分:第一,生产者生产消息,发送到中转站:第二,中转站按定义的规则转发消息到消息队列:第三,消费者从消息队列获取消息进行消费(处理). RabbitMQ消息可靠性分析和应用 应用代码均使用C#客户端代码实现. 一.发布确认 生产者生产消息,发送到中转站的过程…