MQ全称为Message Queue,即消息队列。
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。
它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
优势
使得简单,功能强大。
基于AMQP协议。
社区活跃,文档完善。
得益于Erlang语言,并发性能好。
应用场景
任务异步处理
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理,提高了应用程序的响应时间。
应用之间解耦
生产方通过MQ与消费方交互,它将应用程序进行解耦合。
基本结构
Producer
消息生产者。
Consumer
消息消费者。
Broker
消息队列服务进程,包括Exchange和Queue。
Queue
Queue(队列)是RabbitMQ的内部对象,用于存储消息。
Exchange
Exchange将消息路由到一个或者多个Queue中。
Routing Key
生产者(P)在发送消息给Exchange(X)的时候,会指定一个routing key,即消息的路由规则。一般会与Exchange以及binding key配合使用。
Bindings
通过Binding,将Exchange与Queue进行关联,RabbitMQ才会正确地将消息路由到指定的Queue中。
Binding key
Exchange与Queue进行绑定时,需指定一个binding key。生产者发生消息的时候,会指定routing key,当binding key与routing key满足匹配规则的时候,消息才会被路由到期望的Queue中。
消息发布接收流程
发送消息
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道将消息发送给Broker,由Exchange进行转发。
4、Exchange将消息转发给指定的队列。
接收消息
1、消费者和Broker建立TCP连接。
2、消费者和Broker建立通道。
3、消费者监听指定的Queue。
4、当有消息到达Queue时Broker默认将消息推送给消费者。
5、消费者接收到消息。