RabbitMQ 基于AMQP的开源消息代理软件

RabbitMQ 基于AMQP的开源消息代理软件

一、AMQP简介

1AMQP是什么/h4>

AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是进程之间传递异步消息的 络协议。

2AMQP工作过程

发布者(Publisher)发布消息(Message),经过交换机(Exchange),交换机根据路由规则将收到消息分发给交换机绑定的队列(Queue),最后AMQP代理会将消息投递给订阅了此队列的消费者,或者消费者按照需求自行获取。
Publisher和Consumer就是两个Java项目,AMQP实体后面就是RabbitMQ

四、支持的四种交换机

交换器负责接收客户端传递过来的消息,并转发到对应的队列中。在RabbitMQ中支持四种交换器 1.Direct Exchange:直连交换器(默认)。通过路由键明确指定存储消息的一个队列。
2.Fanout Exchange:扇形交换器。把消息发送给所有绑定的队列。
3.Topic Exchange:主题交换器。按照路由规则,把消息发送给多个队列。
4.Header Exchange:首部交换器。比Direct多了一些头部消息,平时使用较少。
在RabbitMq的Web管理界面中Exchanges选项卡就可以看见这四个交换器:

代码示例:

升级版MQ处理流程,在常规基础上增加死信队列:

将异常的消费可采取以下步骤进行处理:

1、消费异常,进入死信队列
2、死信固定ttl为1分钟
3、按业务评估最大重试次数
4、超过最大重试次数后发送告警到企业微信
5、独立服务处理失败消息,并依赖xxx 服务发送告警到企业微信,告警可配置开关
6、开发人员根据业务,与消息id快速定位日志,人工介入处理

RabbitMQ 基于AMQP的开源消息代理软件

为什么要使用mq的死信队列/h4>

事务问题,事务没提交就消费了,业务代码错误,直接丢掉,很难发现问题
如果不丢掉,重新入队,陷入死循环,导致日志暴增。

不能正常消费的消息叫死信,消费异常进入死信队列
利用TTL机制,一分钟重试一次,直到到达最大重试次数。再发送告警到企业微信

MQ不适合延迟队列,为什么/h4>

例如:第一条延迟1分钟,第二条延迟5秒,但队列是排队的,第二条并不会先消费,只能等第一条消费之后才消费

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月23日
下一篇 2022年2月23日

相关推荐