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


    本文转载自: https://www.93bok.com

    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

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

    运行RabbitMQ监听端口号:

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

    RabbitMQ搭建

    https://www.93bok.com/RabbitMQ消息中间件搭建for Centos7/

    RabbitMQ使用方法

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

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

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

    rabbitmqctl add_vhost 93bok-web
    rabbitmqctl add_vhost 93bok-bbs
    

    2、查看虚拟机列表

    rabbitmqctl list_vhost
    

    3、删除93bok-bbs虚拟机

    rabbitmqctl delete_vhost 93bok-bbs
    

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

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

    Python使用pika模块调用rabbitmq

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

    5、创建生产者代码send.py
    vim send.py
    
    #!/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
    vim receive.py
    
    #!/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、开始测试队列
    python send.py		##执行两次命令,产生两个名字叫hello的消息
    

    iJbCmq.png

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

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

    iJbP00.png

    iJbkkT.png

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

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

    iJbAtU.png

  • 相关阅读:
    JavaScript中的的面向对象中的一些知识
    JavaScript中的Function
    jq 表格全选案例
    jq 美女相册案例
    jq 属性操作
    jq tab图片切换
    jq class操作
    jq css操作
    jquery 淘宝案例
    jquery 鼠标点击下滑案例
  • 原文地址:https://www.cnblogs.com/93bok/p/12425388.html
Copyright © 2020-2023  润新知