RabbitMQ特点
1、灵活性:通过不同类型的exchange、binding_key、routing_key实现灵活的消息分发机制
2、可靠性:通过持久化、回调机制确认来实现消息不丢失
3、高并发:使用earlang语言开发,天生高并发
概念模型
简单的模型:
producer --> broker --> consumer
完整模型:
producer --> exchange -(bindings)-> queue --> consumer
Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
Exchange:消息队列交换机,按一定的规则将消息路由转发到队列,对消息进行多虑
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费者
Producer:消息生产者,即生产方客户端,发送消息到Broker
Consumer:消息消费者,即消费方客户端,从Broker消费消息
交换机类型:
fanout:将收到的消息发送给与它绑定的每一个queue
direct:如果收到的消息的routing_key与binding_key(queue与exchange的绑定key)相同的话,就将该消息路由到指定的queue
topic:原理与direct相同,只不过支持多个维度的匹配、支持‘#’(匹配0个到多个词)、‘*’(匹配一个词)
headers:效率低,不常用
六种工作模式:
1、简单模式:
场景:某个生产者给某个消费者发消息
2、工作队列模式:
场景:生产者给多个消费者发消息,从生产者发出的消息只能被其中一个消费者获取到
3、订阅模式
场景:生产者发布消息,多个消费者都来订阅这个消息
交换机类型为fanout
4、路由模式
场景:生产者发布消息,根据routing_key对应到不同的队列中去,给不同的消费者
采用交换机类型为direct
5、通配符模式
场景:生产者发布的消息,根据routing_key匹配到不同的队列,给不同的消费者
采用交换机类型为topic
6、RPC模式
Remote Procedure Call Protocol 远程过程调用协议
场景:生产者发布消息给消费者后,需要获取返回值