zoukankan      html  css  js  c++  java
  • Python之Rabbitmq发送消息

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。
     

    1、什么是Rabbitmq?

    Rabbitmq是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

    通俗点来讲:把Rabbitmq想象成一个邮局,当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收件人。在这个比喻中,Rabbitmq是邮政信箱,邮局和邮递员。

    消息发送的示意图:

    2、如何搭建一个Rabbitmq服务?

    step1:检索rabbitmq 镜像
    docker search rabbitmq

    step2:下载rabbitmq 镜像
    docker pull rabbitmq:management

    step3: 启动rabbitmq 容器
    docker run -d -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=guest -p 15672:15672 -p 5672:5672 rabbitmq:management

    step4: 登录浏览器查看mq服务是否正常

    3、创建一个虚拟主机 

    创建一个虚拟主机( virtual hosts,系统默认会创建一个/) 并且给guest 账号赋上权限(此步骤可省略)

    如果需要手动创建的话,需要单独创建并且赋权限给guest账号。

    4、Rabbitmq 发消息简单模式 

    step1:获取Rabbitmq服务的连接
    step2:创建一个信道
    step3:声明一个队列
    step4:向列表存放消息
    step5:关闭连接

    具体代码如下:

     1 import json
     2 import pika
     3 import datetime
     4  
     5 #生成消息入口处
     6 def get_message():
     7     for i in range(10): #生成10条消息
     8         message=json.dumps({'id': "10000%s" % i, "amount": 100 * i,"name":"tony","createtime":str(datetime.datetime.now())})
     9         producter(message)
    10  
    11 #消息生产者
    12  
    13 def producter(message):#消息生产者
    14     # 获取与rabbitmq 服务的连接,虚拟队列需要指定参数 virtual_host,如果是默认的可以不填(默认为/),也可以自己创建一个
    15     connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1', port=5672,credentials=pika.PlainCredentials('guest', 'guest')))
    16     #创建一个 AMQP 信道(Channel),建造一个大邮箱,隶属于这家邮局的邮箱
    17     channel = connection.channel()
    18     # 声明消息队列tester,消息将在这个队列传递,如不存在,则创建
    19     channel.queue_declare(queue='tester')
    20     # 向队列插入数值 routing_key的队列名为tester,body 就是放入的消息内容,exchange指定消息在哪个队列传递,这里是空的exchange但仍然能够发送消息到队列中,因为我们使用的是我们定义的空字符串“”exchange(默认的exchange)
    21     channel.basic_publish(exchange='', routing_key='tester', body=message)
    22     # 关闭连接
    23     connection.close()
    24  
    25 if __name__=="__main__":
    26     get_message()#程序执行入口

    5、检查mq中tester队列中是否产生了10条消息记录 

    如下截图所示:

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,一起共同成长吧。

  • 相关阅读:
    POJ 2342 树形DP入门题
    《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova
    GDI+ 填充背景时,非常多时候不起作用,GDI、GDI+配合运用
    Jave中System.getProperty()获取的值
    NYOJ128 前缀式计算(栈的运用)
    Web安全測试二步走
    一个SQL update语句
    C#时间格式之GMT时间的格式
    粘包的处理
    socket对于大数据的发送和接收
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13261381.html
Copyright © 2011-2022 走看看