![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RabbitMQ
文章平均质量分 87
三笠·阿卡曼
日拱一卒无有尽,功不唐捐终入海。
展开
-
RabbitMQ学习(六)--死信队列
死信队列概念死信,指的是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行消费,但某些时候由于特定的原因导致** queue 中的某些消息无法被消费**,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。应用场景:为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ 的死信队列机制,当消息消费发生异常时,将消息投入死信队列中.还有比如说: 用户在商城下单原创 2021-08-11 22:35:42 · 160 阅读 · 0 评论 -
RabbitMQ学习(十)--RabbitMQ集群相关学习
使用集群的原因最开始我们介绍了如何安装及运行 RabbitMQ 服务,不过这些是单机版的,无法满足目前真实应用的要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台 RabbitMQ服务器可以满足每秒 1000 条消息的吞吐量,那么如果应用需要RabbitMQ 服务满足每秒 10 万条消息的吞吐量呢?购买昂贵的服务器来增强单机 RabbitMQ 务的性能显得捉襟见肘,搭建一个 RabbitMQ 集群才是解决实际问题的关键;搭建RabbitMQ集群在使用VM w原创 2021-08-01 10:50:49 · 197 阅读 · 0 评论 -
RabbitMQ学习(九)--RabbitMq的其他知识点
RabbitMQ幂等性概念用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等;对于消息队列来说就是可能会发生消息的重复消费消息原创 2021-07-29 23:52:32 · 137 阅读 · 0 评论 -
RabbitMQ学习(八)--发布确认高级
背景在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢?特别是在这样比较极端的情况,RabbitMQ 集群不可用的时候,无法投递的消息该如何处理呢:应 用 [xxx] 在 [08-1516:36:04] 发 生 [ 错误日志异常 ] , alertId=[xxx] 。 由[org.springframework.amqp.rabbit.li原创 2021-07-29 22:54:26 · 1059 阅读 · 0 评论 -
RabbitMQ学习(七)-- 延迟队列的学习
延迟队列的概念延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是**希望在指定时间到了以后或之前取出和处理,**简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。RabbitMQ中的延迟队列TTL是什么?TTL 是 RabbitMQ 中一个消息或者队列的属性,表明一条消息或者该队列中的所有消息的最大存活时间,单位是毫秒。换句话说,如果一条消息设置了 TTL 属性或者进入了设置 TTL 属性的队列,那么这条消息如果在 TTL 设置的时间内没有被消费,则会成为原创 2021-07-25 19:02:01 · 328 阅读 · 3 评论 -
RabbitMQ学习(五)-- 交换机学习(第三个部分:发布-订阅模式)
RabbitMQ交换机学习在之前的学习中,我们是创建了一个工资队列。我们假设的是在工作队列背后,每个人物都恰好交付给一个确认的消费者(工作进程)。在本节的学习中,我们将做一些不同的事情:将消息传递给多个消费者。这种模式被称为发布/订阅模式;为了说明这种模式,我们将构建一个简单的日志系统,由两个程序组成:第一个程序将发出日志消息;第二个程序是消费者;届时将启动两个消费者,其中一个消费者接收到消息之后将日志存储在磁盘中,另外一个消费者接收到消息之后打印在屏幕上,相当于是第一个程序发出的日志消息将广播原创 2021-07-24 12:25:02 · 179 阅读 · 3 评论 -
RabbitMQ学习(四)-- 消息的发布确认
消息的发布确认发布确认原理生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,== 所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),==一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列了,如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号,此外 brok原创 2021-07-22 22:47:00 · 515 阅读 · 1 评论 -
RabbitMQ学习(三)-- 队列持久化
RabbitMQ持久化概念刚刚我们已经看到了如何处理任务不丢失的情况,但是如何保障当 RabbitMQ 服务停掉以后消息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时,它忽视队列和消息,除非告知它不要这样做。确保消息不会丢失需要做两件事: 我们需要将队列和消息都标记为持久化;队列如何持久化之前我们创建的队列都是非持久化的,rabbitmq 如果重启的化,该队列就会被删除掉,如果要队列实现持久化 需要在声明队列的时候把 durable 参数设置为持久化;但是需要原创 2021-07-21 23:18:02 · 908 阅读 · 1 评论 -
RabbitMQ学习(二)RabbitMQ六大核心部分学习
六大核心部分Java代码实现HelloWorld新建Maven工程,引入依赖<!-- 指定 jdk 编译版本 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compil原创 2021-07-21 22:21:11 · 301 阅读 · 1 评论 -
RabbitMQ学习(一)初识RabbitMQ、RabbitMQ的安装
MQ的相关概念什么是MQMQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。为什么要使用MQ流量削峰举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是原创 2021-07-19 22:24:45 · 197 阅读 · 2 评论 -
RabbitMQ -- Springboot集成RabbitMQ
Spring AMQP特性异步消息监听容器;原生提供RabbitTemplate,方便接收消息;原生提供RabbitAdmin,方便队列、交换机声明;SpringBoot Config 原生支持RabbitMQ;SpringBoot 提供了易用的RabbitMQ连接方式;SpringBoot提供了方便的RabbitMQ配置方式;SpringBoot提供了完善的消息收发方式;异步消息监听容器SpringBoot 自动实现可配置的线程池,并自动注册回调方法,只需实现回调方法;Rabbit原创 2021-03-21 10:44:47 · 157 阅读 · 1 评论 -
RabbitMQ学习(三)--消息的可靠性保证(高级特性)
消息的可靠性保证发送方保证:需要使用RabbitMQ发送端确认机制,确认消息成功发送到RabbitMQ并被处理;需要使用RabbitMQ消息返回机制,若没发现目标队列,中间件会通知发送方;消费方需要使用RabbitMQ消费端确认机制,确认消息没有发生处理异常;需要使用RabbitMQ消费端限流机制,限制消息推送速度,保障接收端服务稳定;RabbitMQ自身大量堆积的消息会给RabbitMQ产生很大的压力,需要使用RabbitMQ消息过期时间,防止消息大量积压;过期后会直接被原创 2021-03-16 23:59:24 · 203 阅读 · 2 评论 -
RabbitMQ学习-- 问题总结
消息流转流程发送者不能直接将消息发送给最终队列,必须发送给交换机;消息根据路由规则,消息由交换机转发给队列;消费者从队列将消息取走合理的交换机和队列设置交换机数量不能过多,一般来说同一个业务,或者同一类业务使用同一个交换机;合理设置队列数量,一般来说一个微服务监听一个队列,或者一个微服务的一个业务监听一个队列;合理设置交换机类型,使用Topic模式时仔细设置绑定键;...原创 2021-03-14 22:44:05 · 68 阅读 · 0 评论 -
RabbitMQ学习--基础总结
为什么使用消息中间件中间件:是提供软件和软件之间连接的软件,以便于软件各部件之间的沟通;异步直接调用的问题业务调用链过长,用户等待时间长部分组件故障会瘫痪整个业务;业务高峰期没有缓冲;业务高峰期时产生大量的异步线程,造成线程池不够用或者内存饱满;!!!使用消息中间件的优势业务调用链短,用户等待时间短;部分组件故障不会瘫痪整个业务;业务高峰期有缓冲;业务高峰期不会产生大量的异步线程;使用消息中间件的作用异步处理;系统解耦;流量削峰和流控;消息广播;消息收集;原创 2021-03-11 23:51:13 · 178 阅读 · 0 评论