RabbitMQ 常用工作模式:
官网地址:https://www.rabbitmq.com/getstarted.html
Publish/Subscribe 发布与订阅模式
订阅模式:
生产者会将消息发送到(Exchange )交换机,Exchange 类型是 Fanout,不同的队列注册到交换机中,不同的消费注册到不同的队列上。
- P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发送到 x 交换机中
- C:消费者,消息的接收者,会一直等待消息的到来
- Queue:消息队列、接收消息、缓存消息
- Exchange:交换机 (X),一边,接收生产者发送的消息,另一边,处理消息。可以想作:生产者把消息交给一个特别的队列、这个特别的队列把消息递交给所有队列、或是将消息丢弃等。至于交换机会如何处理消息取决于交换机的类型。
交换机只负责转发消息,不具备存储消息的能力,假如没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息将会丢失! - Exchange 常用类型:
1、Fanout:广播,将消息交给所有绑定到交换机的队列。
2、Direct:定向,把消息交给符合指定routing key 的队列。
3、Topic:通配符,把消息交给符合routing pattern(路由模式)的队列。
使用场景:
一个消息需要同时通知两个不相同服务,或者一个功能需要同时更新 redis 和 mysql 。
Routing 路由模式
路由模式:
生产者把消息发送到交换机上,消息上携带了具体的 rouing key ,交换机的类型是 Direct。Exchange 会将消息携带 rouing key 跟队列上绑定rouing key 作比较,然后再将消息分配到不同 队列上。
- 队列与交换机的绑定,绑定时需要指定一个 rouing key (路由key)
- 生产者在向 Exchange 发送消息时,也需要指定 rouing key
- Exchange 会把消息上的 rouing key 跟队列的 rouing key进行匹配,匹配上的队列才能接收到消息。
使用场景:
一个消息需要同时通知两个不相同服务,但功能要求只让一个服务接收,这个就可以使用路由模式。
Topics 主题模式
主题模式:
Topic 类型与 Direct 很相似,都是根据 rouing key 来匹配,但 Topic 的 rouing key 可以使用通配符。
Rouing key 通配符的语法 :* 星号代表一个单 # 井号代表一个或者多个单词。
lwc.liuliu.*
//匹配
lwc.liuliu.liu
lwc.liuliu.ba
lwc.liuliu.#
///匹配
lwc.liuliu.liu.liu
lwc.liuliu.ba.ba
lwc.liuliu.liuliu