中间件 消息队列MQ
文章平均质量分 87
kisshotlirs
不要温和地走进那个良夜
展开
-
消息队列 RabbitMQ 之 幂等性、优先级队列、惰性队列
9. RabbitMQ 其他知识点文章目录9. RabbitMQ 其他知识点9.1 幂等性9.1.1 概念9.1.2 消息重复消费9.1.3 解决思路9.1.4 消费端的幂等性保障9.1.5 唯一ID + 指纹码机制9.1.6 Redis原子性9.2 优先级队列9.2.1 使用场景9.2.2 如何添加9.3 惰性队列9.3.1 使用场景9.3.2 两种模式9.3.3 内存开销对比9.1 幂等性9.1.1 概念用户对于统一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作原创 2022-04-28 21:57:10 · 1923 阅读 · 1 评论 -
消息中间件 RabbitMQ 之 发布高级确认 详解
在生产环境中由于一些不明原因,导致RabbitMQ重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复于是,我们开始思考,如何才能进行RabbitMQ的消息可靠投递呢?特别是在这样比较极端的情况下,RabbitMQ集群不可用的时候,无法投递的消息该如何处理呢?原创 2022-04-28 00:37:25 · 2550 阅读 · 0 评论 -
消息中间件 RabbitMQ 之 延迟队列 详解&实战
延迟队列,队列内部是有序的,最重要的特性就体现在它的延迟属性上。延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。简单来说,延迟队列就是用来存放需要在指定时间被处理的元素的队列。延迟队列属于死信队列的一种,属于消息TTL过期的情况。原创 2022-04-26 14:50:15 · 3313 阅读 · 1 评论 -
消息中间件 RabbitMQ 之 死信队列的介绍及实战
死信,顾名思义就是无法被消费的消息。字面意思可以这样理解,一般来说,producer(生产者)将消息投递到 broker 或者直接到 queue(队列)里了。consumer(消费者)从queue中取出消息后进行消费,但某些时候==由于特定的原因导致 queue 中的消息无法被消费==,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列。应用场景:为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制。当消息消费发生异常时,将消息投入死信队列中。比如:用户原创 2022-04-23 23:38:28 · 1143 阅读 · 2 评论 -
消息中间件 RabbitMQ 之 交换机类型及其详解
RabbitMQ 消息传递模型的核心思想是:生产者生产的消息从来不会直接发送到队列。实际上,通常生产者都不知道这些消息发送到了哪些队列中。相反,生产者只能将消息发送到交换机(exchange)。交换机的工作内容非常简单,一方面它接受来自生产者的消息,另一方面将这些消息推入队列。交换机必须知道如何处理收到的消息。是应该把这些消息放入特定队列还是说放到许多队列,或者直接丢弃,这就由交换机的类型决定。原创 2022-04-23 14:43:19 · 1704 阅读 · 0 评论 -
消息中间件 RabbitMQ 之 发布确认
4. 发布确认4.1 发布确认原理生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上的消息都会被指派一个唯一的 ID(从一开始),一旦消息被投递到所有匹配的队列后,broker 就会发送一个确认给生产者(包含消息的唯一ID),这就使得生产者知道消息已经正确到达目的队列了如果消息和队列是持久化的,那么确认消息会在将消息写入磁盘后发出,broker 回传给生产者的确认消息中 ,delivery-tag 包含了确认消息的序列号,此外 broker 中也可以设置原创 2022-04-18 20:01:37 · 120 阅读 · 0 评论 -
消息中间件 RabbitMQ 之 持久化操作
3.3 RabbitMQ 持久化3.3.1 概念之前的消息应答部分已经看到了如何处理消息不丢失的情况,但是如何保障当 RabbitMQ服务停掉之后消息生产者发送过来的消息不丢失呢?默认情况下,RabbitMQ退出或者由于某种原因崩溃的时候,它会忽视队列和消息,除非告知它不要这样做。确保消息不会丢失需要做两件事:将队列和消息都标记为持久化。3.3.2 队列实现持久化之前创建的队列都是非持久化的,RabbitMQ如果重启,该队列就会被删掉,如果要队列实现持久化,需要在声名队列的时候把 dura原创 2022-04-17 20:15:29 · 1784 阅读 · 0 评论 -
消息中间件 RabbitMQ 之 工作队列(2)—消息应答
3.2 消息应答3.2.1 概念消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并且只完成了一部分,如果它突然挂掉了,会发生什么情况?RabbitMQ一旦向消费者传递了一条消息,就会立即将该消息标记为删除。在这种情况下突然有个消费者挂掉了,将会丢失正在处理的信息,以及后续应该发送给该消费者的信息,因为该消费者无法接收到为了保证消息在发送过程中不丢失,RabbitMQ引入消息应答机制消息应答机制指,消费者在接收到消息并且处理了该消息之后,告诉RabbitMQ它已经处理了,原创 2022-04-16 21:58:57 · 1032 阅读 · 0 评论 -
消息中间件 RabbitMQ 之 Work Queues(工作队列)
Work Queues 工作队列工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成的情况。相反我们安排任务在之后执行。把任务封装为消息并将其发送给到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。3.1 轮训分发消息 在这个案例中我们会启动两个线程,一个消息发送线程,我们来看看这两个工作线程是如何工作的3.1.1 抽取工具类将单一不变的操作提取出来,成为工具类,方便使用代码如下:packag原创 2022-04-12 17:31:03 · 154 阅读 · 0 评论 -
Hello World 一个简单的Java程序来介绍RabbitMQ的使用
Hello world在这一部分中,将使用 Java编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。并介绍其中的一些细节。在下图中,P 是生产者,C 是消费者。中间的框是一个队列,RabbitMQ代表使用者保留的消息缓冲区。2.1 依赖 <!--rabbitmq依赖--> <dependency> <groupId>com.rabbitmq</groupId>原创 2022-04-11 18:23:48 · 1176 阅读 · 0 评论 -
消息队列 RabbitMQ的介绍及安装
1.2 RabbitMQ1.2.1 RabbitMQ 的概念RabbitMQ 是一个消息中间件:接收并转发消息。 你可以把它当作一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的包裹送到收件人那里。按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件 RabbitMQ 与快递站的主要区别在于,不处理快件,而是接收、存储、转发消息数据1.2.2 四大核心概念生产者产生数据并发送消息的程序交换机交换机是 RabbitM原创 2022-04-11 00:46:25 · 1864 阅读 · 0 评论 -
消息队列 MQ 简介
1.1 MQ 的相关概念1.1.1 什么是MQ MQ(message queue),从字面意思来看,本质是一个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。 在互联网架构中,MQ 是一种非常常见的上下游 “逻辑解耦 + 物理解耦” 的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ ,不用依赖其他服务。1.1.2 为什么要用 MQ (作用、功能)1. 流量消峰举例: 如果订单系统原创 2022-04-10 00:51:04 · 437 阅读 · 0 评论