rabbitmq的六种工作模式
官网链接:
http://next.rabbitmq.com/getstarted.html
官网给出了每种工作模式的实例代码,可以参考其中的实现。
六种工作模式:
simple模式
一个生产者,一个消费者
work模式
一个生产者,多个消费者
可以认为是simple模式的加强版
当生产者生产速度较快,消费者不能及时消费时,就应该采用该模式。通常C1和C2获取到的消息不会重复,但rabbitmq本身设计,使其存在竞争风险。
资源竞争风险:
由于rabbitmq中存储的任务数据,当存在ack_late时,任务没有执行完毕,队列中的消息不会删除,则会存在一个消息被多个消费者消费的危险。
解决方法:设置同步锁保证一个消息只能被一个worker消费,
publish/subscribe 发布/订阅模式
一个消息生产者,多个消息消费者。且每个消息消费者都从自己的消息队列的都一个消息开始消费,直到最后。
X代表交换机为rabbitMQ中内部组件。消息生产者将消息发送给rabbitMQ后,rabbitMQ会根据订阅的消费者个数,生成对应数目的消息队列,这样每个消费者都能获取生产者发送的全部消息。
相关应用场景:
邮件群发,群聊,广播
routing模式
生产者生产消息后,将消息发送给交换机,交换机根据消息的路由信息和路由方式,将消息发送到不同的消息队列。消费者也根据自己的路由配置从对应的队列中获取消息
topic模式
该模式同routing模式,不同的是routing模式是精确配置路由规则,而topic采用了模糊匹配规则,因此一次可以匹配一个或者多个routing key,也就是topic匹配。
grpc模式
关于多个生产者的疑惑
貌似无法直接多个生产者,但是可以将消息拆分,然后生成多个队列,后端代码根据消费也拆分以下,就可以了。类似于不同类型的消息,走不同的队列,从而达到目的。
如:
msg_type1 -----> rabbitMQ_QUEUE1 -------> type1_worker
msg_type2 -----> rabbitMQ_QUEUE2 -------> type2_worker
或者直接代码不变,生产者在生产消息时,轮询发送给两个不同的QUEUE,为不同的QUEUE启动各自的WORKER
msg ------> rabbitMQ_QUEUE1 ------> worker
msg ------> rabbitMQ_QUEUE2 ------> worker
消息确认模式
消息确认模式
实现关键:
典型问题