4、RabbitMQ五大模式
简单模式,通俗理解就是一个生产者一个消费者和队列,简单模式的broker中没有交换机,只有队列。队列负责暂存消息,生产者往里放,消费者从里取。
工作模式,一个生产者,有多个消费者,多个消费者同时消费一个队列,多个消费者之间是竞争关系,一条消息只能被一个消费者消费,常用于处理较重的,任务较多的情况,提高消费速度,如果还消费不过来,可以通过 增加消费者即可。
发布订阅模式(Pub/Sub),交换机需要与队列进行绑定,绑定之后,一个消息可以被多个消费者都收到。生产这不再将消息直接发送到队列中,而是先发送到交换机上,交换机负责接受生产者的消息,同时还负责处理消息,是分配给指定队列,还是分配给所有队列,具体分配方式要看交换机的类型来决定。交换机常用的几种类型有:
- Fanout:广播,将消息交给所有绑定到交换机的队列
- Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列
- Direct:定向,把消息交给符合指定routing key 的队列
- Header模式
需要注意的是交换机只负责转发消息,不能存储消息,所以如果没有队列与交换机进行绑定那么消息会丢失掉。发布订阅模式与工作队列模式显著的区别就是有个交换机的参与,但是需要指出的是工作队列模式实际上是将消息发送到了默认的交换机上面了,只是不用我们显式的指定,这个默认的交换机类型是Direct直连类型
路由模式,简单理解就是发布订阅模式的升级版,更加严格的模式,队列与交换机不能够随意进行绑定了,需要指定一个RoutingKey才能够绑定,同时生产者发送消息的时候也要指定RoutingKey进行发送,交换机通过RoutingKey去确认消息该分配给哪一个队列,而不是分给所有队列了。只有队列的RoutingKey与发送的消息RoutingKey完全一致才能够收到消息。如下图消费者c1是不可能消费到其他地区订单的message。
主题模式也叫通配符模式,通配符模式简单理解就是路由模式的RoutingKey支持通配符的形式,我们写RoutingKey一般都是用点分割,例如 有beijing.order.create 和beijing.pay两个RoutingKey,通配符支持*号和#号的原则,*号代表的是匹配一个单词,#号代表的是所有单词匹配比如:beijing.#能够匹配到beijing.开头的所有RoutingKey , 而beijing.*只能匹配bejing.pay的RoutingKey。