![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
消息队列
文章平均质量分 79
江海i
不积小流,无以成江海。
展开
-
RabbitMQ——幂等性、优先级队列、惰性队列
1. 幂等性消费者在消费MQ中的消息时,消费者在ack时网络中断,因此MQ没有接收到确认消息,你们这条消息就会从新发给消费者,但是实际上该消息已经被消费了,故而造成重复消费。1.1 解决方法使用全局ID或者UUID每次消费时先判断该消息是否已经消费过。1.2 消费端幂等性保障业务高峰期,生产端可能重复发送了消息,那么消费端就需要实现幂等性来确保一条消息不会被消费多次。1.2.1 唯一ID+指纹码指纹码:根据一定规则生成或者拼接成的唯一信息码,需要保证唯一性,在消费时判断数据库中是原创 2022-03-15 08:43:55 · 2159 阅读 · 0 评论 -
RabbitMQ——发布确认高级
发布确认高级生产环境下发送异常问题,导致RabbitMQ重启,在重启器件生产者投递消息失败,导致消息丢失,需要手动处理。1. SpringBoot版本发布确认1.1 方案图当发送失败时,将消息存到缓存中,交换机接收到消息之后再从缓存中清除已经收到的消息。...原创 2022-03-13 10:55:56 · 2177 阅读 · 0 评论 -
RabbitMQ——延迟队列
1. 延迟队列1.1 概念延迟队列内部是有序的,其中的元素是希望在指定时间到了之后取出或者处理,总之就是用来存放需要在指定时间被处理的元素的队列。1.2 使用场景用来在一定时间间隔内对相应的事件做出提醒或者操作。1.3 整合SpringBoot正常新建SpringBoot项目即可。SpringBoot版本为2.5.6,如果版本过高与Swagger2版本相差过大就会抛出异常。添加依赖:<dependencies> <dependency>原创 2022-03-10 19:43:04 · 2660 阅读 · 0 评论 -
RabbitMQ——死信队列
1. 死信队列1.1 概念死信就是无法被消费的消息,消费者从队列中取消息时,由于某些特定原因导致消息无法被消费,即没有了后续的处理,就变成了死信继而有了死信队列。1.2 应用场景可以保证消息不会消失,如果消费者在进行消费时发送异常,可以先放到死信队列中,等后面运行环境好了之后再进行消费。1.3 死信来源消息TTL过期;队列达到最大长度;消息被拒绝。1.4 死信实战架构图:正常情况下使用normal交换机绑定给normal队列C1进行消费;出现异常情况就转发给 dead交原创 2022-03-09 15:26:56 · 1517 阅读 · 0 评论 -
RabbitMQ——交换机
1. 交换机 exchange不指定交换机直接发送到队列时,多个消费者之间存在的是竞争关系,一个消息只能被一个消费者接收,其他的消费者不能够再次接收;交换机可以绑定多个不同的队列,但是其Routingkkey是相同的,这样就可以从多个不同的队列发送相同的消息给多个消费者。不指定交换机的情况,称为简单(工作)模式:使用交换机的情况,称为发布、订阅模式:在RabbitMQ中生产者不会讲消息直接发送到队列(不指定有默认交换机);交换机接收来自生产者的消息并推送给队列。交换机类型:dire原创 2022-03-08 20:07:39 · 2425 阅读 · 1 评论 -
RabbitMQ——持久化、发布确认
1. 持久化当RabbitMQ服务停掉以后消息生产者发送过的消息不丢失。默认情况下RabbitMQ退出或者崩溃时,会忽视掉队列和消息。为了保证消息不丢失需要将队列和消息都标记为持久化。2.1 如何实现在创建队列时将channel.queueDeclare();第二个参数改为true。...原创 2022-03-07 18:23:19 · 872 阅读 · 1 评论 -
RabbitMQ——工作队列、消息应答
Work Queues工作队列(任务队列)主要思想是避免立即执行资源密集型任务,而不得不等待它完成,相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。其实就是生产者发送大量的消息,发送到队列之后,由多个消费者(工作线程)来处理消息,并且每个消息只能被处理一次。1. 轮询分发消息多个工作线程按照次序每来一个消息执行一次。1.2 抽取工具类直接通过信息获取信道/** * @原创 2022-03-05 20:12:44 · 340 阅读 · 0 评论 -
RabbitMQ——使用Docker安装和Java整合Demo
1. 安装RabbitMQ直接使用docker镜像安装RabbitMQ即可。docker search RabbitMQ直接选择stars最多的,同时也是最新版本的。直接拉下来镜像即可。docker pull RabbitMQ运行启动RabbitMQ将镜像端口号映射到5672docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq进入容器安装RabbitMQ的web访问原创 2022-03-04 19:50:58 · 972 阅读 · 1 评论 -
ActiveMQ——Day05
20. 面试20.1 宕机怎么办这得从ActiveMQ的储存机制说起。在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的节点中配置。但是,在非持久化消息堆积到一定程度,内存告急的时候,ActiveMQ会将内存中的非持久化消息写入临时文件中,以腾出内存。虽然都保存到了文件里,但它和持久化消息的区别是,重启后持久化消息会从文件中恢复,非持久化的临时文件会直接删除。那如果文件增大到达了配置中的最大限制的时候会发生什么?设置2G左右的持久化文件限制,大原创 2020-10-22 11:16:27 · 230 阅读 · 0 评论 -
ActiveMQ——Day04
15. ActiveMQ传输协议在ActiveMQ的配置文件中默认支持五种传输协议,分别是:1. openwire(tcp) 2.amqp 3.stomp 4.mqtt 5.ws。在更改协议时,必须保证ActiveMQ没有运行。15.1 Tcp:TCP传输允许客户端使用TCP套接字段,远程连接到ActiveMQ代理,这些配置了JMS的客户端的连接URL字符串或在代理的传输连接器URI上调整客户端上的底层TCP传输。TCP是默认的broker配置,TCP的Client监听端口61616,在网络传输协议原创 2020-10-22 11:14:21 · 293 阅读 · 1 评论 -
ActiveMQ——Day03
13. Spring整合ActiveMQ依赖: <properties> <activemq.version>5.15.5</activemq.version> <slf4j.version>1.7.30</slf4j.version> <lombok.version>1.18.12</lombok.version> <spring.versio原创 2020-10-22 11:09:48 · 123 阅读 · 0 评论 -
ActiveMQ——Day02
8. 发布/订阅模式8.1 主题的生产者/** * 主题的发送者 * @date 2020/10/7 15:18 */public class TestProducer { private static String brokerURL = "tcp://106.12.51.117:61617"; private static String topicName = "topic-Hello"; public static void main(String[] arg原创 2020-10-22 11:07:25 · 107 阅读 · 0 评论 -
ActiveMQ——Day01
ActiveMQ1. 什么是MQ面向消息的中间件,提供可靠的消息传递机制进行与平台无关的数据交流,基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性收缩,冗余存储,流量削峰,异步通信,数据同步等。发送者把消息发送给服务器,消息服务器把消息存放在若干队列/主题中,在合适的时候转发给接收者。发送和接收是异步的,无需等待的,发送者的接收者的声明周期也没有关系。在发布/订阅的模式下,可以完成一对多的通信,可以让一条消息有多个接收者(类似于微信公众号)。用来解原创 2020-10-22 11:02:41 · 119 阅读 · 0 评论