搭建RabbitMQ解决电商促销活动高并发的问题

RabbitMQ概述:

RabbitMQ是使用最广泛的开源消息代理。RabbitMQ轻量级,易于在集群内部和云平台中部署。它支持多种消息传递协议。 它可以满足企业高规模,高可用性的要求。RabbitMQ使用Erlang语言开发的。

MQ概述:

全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

MQ运行机制:

P表示生产者,C表示消费者,红色部分为消息队列

iJHb0P.png

MQ实战场景:

场景一:

我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让我们稍等,以及一些友好的图片文字提醒。而不是像前几年的时代,动不动就页面卡死,报错等来呈现给用户。在这个业务场景中,我们就可以采用队列的机制来处理,因为同时结算就只能达到这么多。

iJHOk8.png

iJHjfg.png

场景二:

在我们平时的超市中购物也是一样,当我们在结算的时候,并不会一窝蜂一样涌入收银台,而是排队结算。这也是队列机制。一个接着一个的处理,不能插队。

iJHxpQ.png

AMQP

RabbitMQ是AMQP服务器的一种

AMQP简介:

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

AMQP的主要特征:

是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

AMQP 里主要两个组件:

Exchange和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer(生产者) 和 Consumer(消费者) 两种类型:

iJHzlj.png

1
2
官方网站:http://www.rabbitmq.com/
下载地址:http://www.rabbitmq.com/download.html

运行RabbitMQ监听端口号:

1
2
3
4
4369   #erlang发现口
5672 #client端通信口
15672 #管理界面ui端口
25672 #server间内部通信口

RabbitMQ搭建

https://www.93bok.com/RabbitMQ%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%90%AD%E5%BB%BAfor%20Centos7/

RabbitMQ使用方法

RabbitMQ相关查看命令
1
2
3
rabbitmqctl list_connections			##查看当前连接
rabbitmqctl list_queues ##列出所有队列
rabbitmqctl status ##查看当前队列信息
RabbitMQ的vhost管理

实战场景: 当我们在创建用户时,会指定用户能访问一个虚拟机,并且该用户只能访问该虚拟机下的队列和交换机,如果没有指定,默认的是”/”;一个rabbitmq服务器上可以运行多个vhost,以便于适用不同的业务需要,这样做既可以满足权限配置的要求,也可以避免不同业务之间队列、交换机的命名冲突问题,因为不同vhost之间是隔离的。

1、添加93bok-web和93bok-bbs两个虚拟机来管理网站和论坛的队列

1
2
rabbitmqctl add_vhost 93bok-web
rabbitmqctl add_vhost 93bok-bbs

2、查看虚拟机列表

1
rabbitmqctl list_vhost

3、删除93bok-bbs虚拟机

1
rabbitmqctl delete_vhost 93bok-bbs

实战演示使用python调用RabbitmMQ服务

1、安装python环境
1
yum -y install python
2、安装pip命令
1
2
yum -y install epel-release
yum -y install python-pip
3、更新pip
1
pip install --upgrade pip
4、安装pika模块

Python使用pika模块调用rabbitmq

注意:rabbitmq本质是一个生产者和消费者的模型结构。生产者->rabbitmq->消费者,即生产者产生消息,给到rabbitmq存储,消费者从rabbitmq中读取数据。

5、创建生产者代码send.py
1
vim send.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()


channel.queue_declare(queue='hello')

channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print("[x] Sent 'Hello World!'")
connection.close()
6、创建消费者代码receive.py
1
vim receive.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()


channel.queue_declare(queue='hello')

def callback(ch,method,properties,body):
print('[x] Received %r' %body)

channel.basic_consume(callback,
queue='hello',
no_ack=True)

print('[*] Waiting for messages.To exit press CTRL+C')
channel.start_consuming()
7、开始测试队列
1
python send.py		##执行两次命令,产生两个名字叫hello的消息

iJbCmq.png

1
rabbitmqctl list_queues		##查看消息队列喂为2

在web界面查看消息队列,可以发现2个消息队列等待处理:

iJbP00.png

iJbkkT.png

1
2
python receive.py			##消费这两个消息
rabbitmqctl list_queues ##查看队列已经为0

在web界面查看队列,也为0了

iJbAtU.png

博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%