![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RabbitMQ
RabbitMQ
知之为知
记录学习内容
展开
-
RabbitMQ 集群、Federation、Shovel
一:集群集群将多台机器连接在一起,形成一个逻辑代理通信是通过Erlang消息传递的,因此集群中的所有节点都必须具有相同的Erlang cookie群集中计算机之间的网络链接必须可靠,群集中的所有计算机必须运行相同版本的RabbitMQ和Erlang1.单机版缺陷:(1)单台RabbitMQ服务器的吞吐量有限(2)单节点遇到内存崩溃、机器掉电或者主板故障会导致服务不可用2.搭建步骤:(1)修改 3 台机器的主机名称vim /etc/hostname(2)配置各个节点的 hosts 文原创 2021-11-29 20:01:59 · 472 阅读 · 0 评论 -
RabbitMQ 幂等性、消息优先级、惰性队列
1.幂等性MQ消息重复消费问题:消费者在消费 MQ 中的消息时,MQ 已把消息发送给消费者,消费者在给 MQ 返回 ack 时网络中断,故 MQ 未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息解决思路:生成一个全局唯一 id,每次消费消息时用该 id 先判断该消息是否已消费过利用查询语句进行判断这个id是否存在数据库中,劣势就是在高并发时如果是单个数据库就会有写入性能瓶颈(不推荐)业界主流的幂等性原创 2021-11-29 19:51:02 · 709 阅读 · 0 评论 -
RabbitMQ 延迟队列
延迟队列:在指定时间之后取出处理使用场景:订单在十分钟之内未支付则自动取消,用户注册成功后如果三天内没有登陆则进行短信提醒延时队列:(1)在队列定义时为队列设置TTL(2)通用的延时队列(发送消息时为消息设置TTL)如果在TTL设置的时间内没有被消费,则会成为"死信" -> 转到死信队列如果同时配置了队列的TTL和消息的TTL,那么较小的那个值将会被使用在消息属性上设置TTL,消息可能不会按时“死亡“,因为RabbitMQ只会检查第一个消息是否过期整合springboot:(1原创 2021-11-29 19:48:58 · 230 阅读 · 0 评论 -
RabbitMQ 死信队列
死信的来源:(1)消息TTL过期(2)队列满了(3)消息被拒绝(basic.reject 或 basic.nack)并且requeue=false死信队列:放死信的队列称为死信队列应用:在商城下单成功并点击去支付后在指定时间未支付时自动失效->放入死信队列主体代码思路:c1:声明交换机:normal_exchange、dead_exchange声明队列:normal_queue、dead_queue(定义normal_queue时额外指定死信的交换机与路由)绑定交换机与队列原创 2021-11-29 19:45:45 · 174 阅读 · 0 评论 -
RabbitMQ Exchanges
生产者只能将消息发送到交换机(exchange),交换机接收来生产者的消息,并将它们推入队列,如何推送到队列?Exchanges 的类型:扇出(fanout), 直接(direct), 主题(topic), 标题(headers)channel.basicPublish("", QUEUE_NAME, null, message.getBytes());指定交换机时使用空字符串("")表示使用(AMQP default)交换机The default exchange is implicitly原创 2021-11-29 19:44:40 · 461 阅读 · 0 评论 -
RabbitMQ 消息确认
1.生成者不知道消息是否真正到达broker(confirm模式)(1)普通confirm模式:同步确认发布,publish一条消息后,等待服务器端confirm,如果服务端返回false或者超时时间内未返回,客户端进行消息重传channel.confirmSelect();//开启发布确认channel.basicPublish("", QUEUE_NAME, null, message.getBytes());if(!channel.waitForConfirms()){ System.ou原创 2021-11-29 19:43:20 · 634 阅读 · 0 评论 -
RabbitMQ六种队列模式
1.简单队列1.引入maven依赖:<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.8.0</version></dependency>2.获取连接工具类:public class ConnectionUtil { public s.原创 2021-11-29 19:38:27 · 508 阅读 · 0 评论 -
RabbitMQ安装
RabbitMQ 是一个消息中间件,接收、存储、转发消息数据核心概念:(1)生产者:产生数据发送消息的程序(2)交换机:接收来自生产者的消息并处理它接收到的消息(将消息推送到特定队列、推送到多个队列、丢弃消息)(3)队列:RabbitMQ 内部使用的一种数据结构,一个大的消息缓冲区,仅受主机的内存和磁盘限制的约束(4)消费者:接收消息的程序,同一个应用程序既可以是生产者又可以是消费者RabbitMQ 6种模式:(1)Hello World(2)Work queues(3)Publish原创 2021-11-29 19:32:22 · 220 阅读 · 0 评论 -
MQ 的相关概念
MQ(message queue):本质是个FIFO 先入先出的队列,还是一种跨进程的通信机制,用于上下游传递消息1.MQ作用:(1)流量消峰:在流量高峰期,使用消息队列做缓冲(2)应用解耦:耦合:一笔订单数据->(库存系统+物流系统+支付系统),任何一个子系统出了故障,都会造成下单操作异常解耦:一笔订单数据->MQ->(库存系统、物流系统、支付系统),比如物流系统因为发生故障,数据被<缓存>在消息队列中,当物流系统恢复后,继续处理订单信息即可,下单用户感受不到物流原创 2021-11-29 19:28:43 · 607 阅读 · 0 评论