RabbitMQ分享

RabbitMQ遵循AMQP协议,自身采用Erlang

RabbitMQ工作模式

生产者发消息,启动多个消费者实例来消费消息,每个消费者仅消费部分信息,可达到负载均衡的效果。

RabbitMQ三种常用交换机类型:

交换机主要起调度分发作用。

direct(直连交换机)

Direct,完全匹配型交换机,此种类型交换机,通过RoutingKey路由键将交换机和队列进行绑定, 消息被发送到exchange时,需要根据消息的RoutingKey,来进行匹配,只将消息发送到完全匹配到此RoutingKey的队列。

如图,不同的key绑定不同的队列,实现不同消息分发至不同队列。

PS: 注意同一个key,可以绑定多个queue队列。如图中,当匹配到key1时,则会将消息分发送至queue1和queue2,这样两个队列都会有相同的消息数据。

fanout(扇形交换机)

Fanout,扇出类型交换机,此种交换机,会将消息分发给所有绑定了此交换机的队列,此时RoutingKey参数无效。

此种方式,最简单快速,性能最好,因为少了中间的匹配判断环节。

一按用于全量分发

topic (主题交换机)

Topic,主题类型交换机,此种交换机与Direct类似,也是需要通过routingkey路由键进行匹配分发,区别在于Topic可以进行模糊匹配,Direct是完全匹配。

Topic中,将routingkey通过"."来分为多个部分,通过如下功能字符来进行匹配:

  • "*":代表一个部分
  • "#":代表一个或多个部分

举例说明:比如我们现在的应用场景为日志处理

routingkey 设置为:*.error

生产者推送的路由为:login.error 、reg.error 都会匹配到 *.error对应的队列,由该队列 对登录、注册的错误进行业务处理。

消息可靠性问题

保证最终一致性,我们需要确保消息队列有ack机制 客户端收到消 息并消费处理完成后,客户端发送ack消息给消息中间件 如果消息中间件超过指定时间还没收 到ack消息,则定时去重发消息。

死信队列

在定义业务队列时可以考虑指定一个 死信交换机,并绑定一个死信队列。当消息变成死信时,该消 息就会被发送到该死信队列上,这样方便我们查看消息失败的原因。 DLX,全称为Dead-Letter-Exchange,死信交换器。消息在一个队列中变成死信(Dead Letter) 之后,被重新发送到一个特殊的交换器(DLX)中,同时,绑定DLX的队列就称为"死信队列"。

主要用于:必须成功的业务,即使处理不成功 也需进行手动处理。

例子:比如调用第三方话费接口充值话费 消费者处理失败,那么正常的业务逻辑就会进入到 死信队列 进行入库,后续人工介入充值。

扩展学习:

延迟队列:

延迟消息是指的消息发送出去后并不想立即就被消费,而是需要等(指定的)一段时间后才触发消费。

TTL机制:

在京东下单,订单创建成功,等待支付,一般会给30分钟的时间,开始倒计时。如果在这段时间内 用户没有支付,则默认订单取消。

相关推荐
海上小飞龙10 小时前
Redis 分布式锁原理:从 SET NX EX 到 Redisson 看门狗
数据库·redis·分布式
明达智控技术11 小时前
国产PLC、远程IO模块在食品包装机的应用
分布式·自动化
YOU OU16 小时前
RabbitMQ应用问题
分布式·rabbitmq
YOU OU19 小时前
RabbitMQ高级特性
分布式·rabbitmq
珠***格1 天前
双碳目标下:四可装置如何助力光伏消纳与碳数据上报
网络·人工智能·分布式·安全·边缘计算
科力锐品牌君1 天前
行业龙头|科力锐全链路防勒索 + 多中心容灾方案,构筑河南翔宇医疗业务安全闭环!
网络·数据库·分布式·安全·数据安全·备份
WHS-_-20222 天前
基于网络感知自适应树与辅助路由加速地理分布式机器学习
网络·分布式·机器学习
JLWcai202510092 天前
核电打磨 “安全卫士”|金利威不锈钢专用树脂砂轮,合规高效双在线
mysql·mongodb·eureka·sqlite·rabbitmq·nosql·memcached
Kripath_Rion2 天前
带你速通计算机经典论文(一):分布式系统篇
分布式·后端·架构
ACP广源盛139246256732 天前
Ling‑3.0‑flash 昇腾 0‑Day 适配落地@ACP#IX9104 在国产高密度算力矩阵中的机遇与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件