Go秒杀系统——RabbitMQ入门

本文介绍了消息队列的三大功能:流量削峰,通过缓冲处理高并发请求,提升用户体验;应用解耦,减少模块间依赖,增强系统稳定性;以及优雅的异步处理,实现低延迟和高并发。同时,详细讲解了AMQP(Advanced Message Queuing Protocol),一种跨平台、跨语言的网络协议,用于进程间的消息传递。AMQP中的发布者、消费者和消息代理角色协同工作,实现消息的可靠传输。
摘要由CSDN通过智能技术生成

一、消息队列的三大功能


1.流量削峰

典型的就是电商场景中的订单超量。比如订单系统只能承受1万/秒的并发量,在搞活动时进来了2万/秒的单量,那么订单系统就宕机了。
没有MQ时可以采取限制下单,订单量达到一万后限制用户下单,很明显这样体验极差。
若使用MQ作为缓冲则可以取消这个限制,它将一秒内处理不完的订单分散到更长的一段时间去处理,这样虽然用户可能得等一段时间才能获得下单成功的反馈,但比完全下不了单体验好。

2.应用解耦

仍以电商场景中的用户下单为例,一个完整的下单流程涉及订单系统、支付系统、库存系统、物流系统等。
假如这几个子模块是相互紧密耦合的,那么任意一个模块出现bug将会牵一发而动全身,下单操作就无法完成。
加入MQ后就不会有这种情况,假如物流系统发生故障,可以做一个现场保护,将待处理的缓存在MQ中,等物流系统修复后再继续处理缓存的内容。在用户感知层面,他的下单操作已经正常完成。当物流系统恢复后再继续处理订单即可,下单用户无法感知到物流系统的故障,提升了用户体验。

3.优雅的异步处理

这里需要再明确一下异步的概念,通俗地讲,就是发送一个请求,不等待返回值,随时可以再发送下一个请求
假如A请求B,B需要很长时间处理,但A需要知道B什么时候处理好。不采用MQ时有两种不优雅的处理方式,一种是A隔一段时间去查询一下B是否处理好;另一种是A提供一个callback接口,B处理完后调用A的这个接口通知A(这样就使A与B间的耦合性提高了)。
若加入MQ,那么A只需监听MQ里是否有B处理完成的消息,B只需处理完成后给MQ发一条已完成的消息。这样减少了API的开发,降低了耦合性。


二、AMQP详解


AMQP官网

我们为什么要讲AMQP,因为RabbitMQ就是基于AMQP实现的。

初识AMQP

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是一个进程间传递异步消息的网络协议
这里的进程间主要是指符合要求的客户端和消息中间件代理之间,它天然具有跨平台、跨语言的特性。(JMS仅支持Java)
这个协议中最重要的三个角色就是发布者、消费者和消息代理,消息代理接收发布者生产的消息,根据一定的路由规则将消息转发给处理消息的消费者。因为AMQP是一个网络协议,所以这三个角色可以在不同的服务器上。

在OpenStack中,RabbitMQ是消息代理的核心组件,负责处理各种消息,包括API请求、队列通信和通知。为了保证高可用性和可扩展性,我们可以将RabbitMQ部署为集群。 以下是在OpenStack中部署RabbitMQ集群的步骤: 1. 安装RabbitMQ软件包 在每个节点上安装RabbitMQ软件包。可以使用以下命令进行安装: ``` sudo apt-get install rabbitmq-server ``` 2. 配置RabbitMQ 在每个节点上,编辑RabbitMQ配置文件/etc/rabbitmq/rabbitmq-env.conf,指定以下环境变量: ``` NODE_IP_ADDRESS=<本地IP> NODE_PORT=5672 CLUSTER_WITH=<其他节点IP> ``` 其中,NODE_IP_ADDRESS是本地IP地址,CLUSTER_WITH是其他节点的IP地址。这些变量将用于RabbitMQ节点间通信。 3. 启用RabbitMQ插件 在每个节点上启用RabbitMQ集群插件。可以使用以下命令启用插件: ``` sudo rabbitmq-plugins enable rabbitmq_management rabbitmq_peer_discovery_aws ``` 4. 启动RabbitMQ节点 在每个节点上启动RabbitMQ节点。可以使用以下命令启动节点: ``` sudo rabbitmq-server -detached ``` 5. 将节点加入集群 在任何一个节点上,执行以下命令将节点加入集群: ``` sudo rabbitmqctl stop_app sudo rabbitmqctl join_cluster rabbit@<其他节点名称> sudo rabbitmqctl start_app ``` 其中,<其他节点名称>是集群中的其他节点的名称。 6. 验证集群状态 在任何一个节点上,执行以下命令验证集群状态: ``` sudo rabbitmqctl cluster_status ``` 如果输出包含所有节点的信息,则集群已成功部署。 注意:在部署RabbitMQ集群时,需要确保集群节点之间的网络连接正常,并且防火墙已正确配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值