RabbitMQ工作模式

本文深入探讨了消息队列的多种工作模式,包括工作队列、发布订阅模式、路由模式、主题模式和Header模式,以及如何利用这些模式进行高效的任务处理和消息传递。

一、 Work queues
在这里插入图片描述
work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息。
应用场景:对于 任务过重或任务较多情况使用工作队列可以提高任务处理的速度。
方式:
1、一条消息只会被一个消费者接收;
2、rabbit采用轮询的方式将消息是平均发送给消费者的;
3、消费者在处理完某条消息后,才会收到下一条消息。
二、Publish/subscribe(发布订阅模式)
在这里插入图片描述
工作模式:
1、每个消费者监听自己的队列。
2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收 到消息
生产者:
声明Exchange_fanout_inform交换机。
声明两个队列并且绑定到此交换机,绑定时不需要指定routingkey
发送消息时不需要指定routingkey
publish/subscribe与work queues有什么区别。
区别:
1)work queues不用定义交换机,而publish/subscribe需要定义交换机。
2)publish/subscribe的生产方是面向交换机发送消息,work queues的生产方是面向队列发送消息(底层使用默认 交换机)。
3)publish/subscribe需要设置队列和交换机的绑定,work queues不需要设置,实质上work queues会将队列绑 定到默认的交换机 。
相同点: 所以两者实现的发布/订阅的效果是一样的,多个消费端监听同一个队列不会重复消费消息。
三、Routing(路由模式)
在这里插入图片描述
工作模式:
1、每个消费者监听自己的队列,并且设置routingkey。 2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列。
生产者:
声明exchange_routing_inform交换机。
声明两个队列并且绑定到此交换机,绑定时需要指定routingkey
发送消息时需要指定routingkey
使用生产者发送若干条消息,交换机根据routingkey转发消息到指定的队列。
Routing模式和Publish/subscibe有啥区别
Routing模式要求队列在绑定交换机时要指定routingkey,消息会转发到符合routingkey的队列。
四、 Topics
在这里插入图片描述
工作模式:
1、每个消费者监听自己的队列,并且设置带统配符的routingkey。 2、生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。
生产者
声明交换机,指定topic类型:
在这里插入图片描述
消费端
队列绑定交换机指定通配符:
统配符规则:
中间以“.”分隔。
符号#可以匹配多个词,符号*可以匹配一个词语。
在这里插入图片描述
五、Header模式
header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配 队列。
案例:
根据用户的通知设置去通知用户,设置接收Email的用户只接收Email,设置接收sms的用户只接收sms,设置两种 通知类型都接收的则两种通知都有效。
代码:
1)生产者 队列与交换机绑定的代码与之前不同,如下:
在这里插入图片描述
通知:
在这里插入图片描述
2)发送邮件消费者
在这里插入图片描述
六、RPC
在这里插入图片描述
RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
1、客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果
3、服务端将RPC方法 的结果发送到RPC响应队列
4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

RabbitMQ 支持多种工作模式,以满足同的消息传递需求。以下是几种常见的 RabbitMQ 工作模式及其特点: ### 简单模式(Simple Mode) 这是最基础的消息传递模式,其中生产者发送消息到队列,消费者从队列接收消息。在这种模式下,每个消息只被传递一次,并且只有一个消费者可以接收到该消息。这种模式适用于需要复杂路由逻辑的场景。 ### 发布/订阅模式(Publish/Subscribe) 在这种模式下,生产者接将消息发送给队列,而是将消息发送给交换机(Exchange)。交换机会将消息广播给所有绑定到它的队列。这样,多个消费者可以同时接收到相同的消息,适合用于需要将信息广播给多个服务的情况 [^2]。 ### 路由模式(Routing) 路由模式允许生产者根据特定的规则将消息发送到同的队列。这些规则基于消息的路由键(routing key)和队列交换机之间的绑定键(binding key)匹配。这种方式提供了更精细的消息分发控制,使得消息可以根据业务需求被正确地导向指定的服务 [^2]。 ### 主题模式(Topics) 主题模式是路由模式的一种扩展,它允许使用通配符来定义绑定键,从而实现更加灵活的消息路由机制。通过这种方式,可以轻松地创出具有相似功能的服务组,它们共同处理某一类消息 [^2]。 ### RPC 模式(Remote Procedure Call) RPC 模式支持客户端向服务器请求执行某个操作,并等待结果返回。在这个过程中,客户端会发送一个带有回调队列名称的消息给服务端,服务端处理完请求后将结果发送回指定的回调队列。这种模式非常适合构分布式应用程序中的远程调用服务 [^2]。 ### 工作队列模式(Work Queues) 工作队列模式也被称为任务队列模式,主要用于分配耗时的任务给多个工作者进程。当有多个消费者订阅同一个队列时,RabbitMQ 会轮询地将消息分发给各个消费者,确保负载均衡。此外,为了防止消息丢失,通常还会启用确认机制,只有在收到消费者的确认之后才会删除队列中的消息 [^3]。 ```python def callback(ch, method, properties, body): print(" [x] Received %r" % body) # 处理消息... ch.basic_ack(delivery_tag=method.delivery_tag) # 发送确认 channel.basic_consume(queue='task_queue', on_message_callback=callback, auto_ack=False) # 关闭自动确认 ``` 以上就是 RabbitMQ 的几种主要工作模式,每种模式都有其适用场景,开发者可以根据实际需求选择合适的模式或者组合使用多种模式来构高效可靠的异步通信系统。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值