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

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

一、AMQP简介

1AMQP是什么/h4>

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

2AMQP工作过程

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

RabbitMQ 基于AMQP的开源消息代理软件
1.Message
消息。消息是不具名的,它由消息头消息体组成。消息体是不透明的,而消息头则由
一系列可选属性组成,这些属性包括:routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出消息可能持久性存储)等。
2.Publisher
消息的生产者。也是一个向交换器发布消息的客户端应用程序。
通俗说明:哪些项目向RabbitMQ发送消息,哪些项目就是Publisher
3.Consumer
消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。
Consumer会一直监听指定的队列,只要队列中有消息,就会按照顺序依次取出。
使用MQ做耗时任务时,耗时任务就交给Consumer进行完成。
4.Exchange
交换器。用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
一共支持四种的交换器类型
1.direct(发布与订阅 完全匹配)
2.fanout(广播)
3.topic(主题,规则匹配)
4.header(使用较少,相比direct就多了一些头信息)
5.Binding
绑定。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
一个交换器里面可以绑定多个队列。一个队列一般都是只绑定到一个交换器上。消息发送给交换器,交换器会把效果按照特定规则发送给绑定的队列。
6.Queue
消息队列。用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
7.Routing-key
路由键。RabbitMQ决定消息该投递到哪个队列的规则。(也可以理解为队列的名称,路由键是key,队列是value)
队列通过路由键绑定到交换器。
消息发送到MQ服务器时,消息将拥有一个路由键,即便是空的,RabbitMQ也会将其和绑定使用的路由键进行匹配。
如果相匹配,消息将会投递到该队列。
如果不匹配,消息将会进入黑洞。
通俗理解:队列绑定到交换器时有路由键,这个路邮件就相当于key-value中的key,value是队列。当Publisher发送消息时一定会携带路由键,有了路由键就让交换器知道了这个消息要发送给哪个队列。

四、支持的四种交换机

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

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

代码示例:

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

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

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

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

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

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

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

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

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

来源:qq_41194395

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

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

相关推荐