目录

一、使用思路

二、Rabbitmq服务器的准备

三、代码示例:python程序中连接RabbitMQ和使用

四、名词解释


一、使用思路

RabbitMQ也称 面向消息的中间件。RabbitMQ以服务器的形式 需要我们的python程序去连接它,进而向RabbitMQ中放消息(生产) 或 从其中拿消息(消费)。

二、Rabbitmq服务器的准备

(注意: 如果开发者所在公司已提供RabbitMQ服务,则可省略此步骤,直接拿到RabbitMQ配置如 账号密码等信息 后直接连接就好啦 )

如公司没提供则可以选择自己搭建RabbitMQ服务;也可以选择使用阿里云打造的RabbitMQ云消息服务,因为直接使用阿里云的更方便和安全,这里使用这种方式 (需付费)

关于如何使用阿里云的RabbitMQ服务:        阿里云官网进入'控制台'(目前在官网页面右上角) -> 登录 '消息队列RabbitMQ版控制台'  -> 创建/购买 '实例' -> '实例列表' 中点击创建好的实例名称则进一步可以查看和管理 当前实例下的 vhost列表、exchange列表、queue列表、消息内容等

三、代码示例:python程序中连接RabbitMQ和使用

代码中封装了RabbitMQ类,RabbitMQ类中封装了连接rabbitmq、发送消息get函数、获取消息set函数。类的实例化对象rabbit_obj调用类中实例方法,实现生产消息发送消息相关操作。

callback函数中拿到了消息,这里把消息打印了出来。

使用开子线程去执行消费的原因是,避免消费任务监听消息时阻塞主程序向下执行。

(阅读注释可方便理解)

import pika  # 安装pika模块连接mq
import json
import os
import threading# 项目基本配置
class BaseConfig():env= os.environ.get('env','sit')  # 获取环境变量# rabbitmq 配置信息
class RabbitMQConfig(object):if BaseConfig.env in ['dev', 'sit']:host = "***.***.***.***"port = ****username = "****"password = "******"       vhost = f"hello_mq_{BaseConfig.env}"exchange = f"hello_mq_{BaseConfig.env}"routing_key = f"hello_mq_{BaseConfig.env}"queue_name = f"hello_mq_{BaseConfig.env}"if BaseConfig.env in ['prod',]:pass# 消费者消费时basic_consume函数中的on_message_callback参数会执行此方法,我们Python程序进而在这里可以拿到消息内容 和 给rabbitmq回调ack
def callback(ch, method, properties, body):print('callback body ', body.decode())  # 在这里对消息内容进行我们想做的处理ch.basic_ack(delivery_tag=method.delivery_tag)  # 手动应答ack,确保消息真正消费后才应答class RabbitMQ(object):def __init__(self, username, password, host, port, virtual_host):self.username = usernameself.password = passwordself.host = hostself.port = portself.virtual_host = virtual_hostself.get_connect()  # 初始化RabbitMQ实例对象时完成连接rabbitmq服务器def get_connect(self):credentials = pika.PlainCredentials(username=self.username, password=self.password)  # 登录凭证self.connect = pika.BlockingConnection(pika.ConnectionParameters(host=self.host, port=self.port, virtual_host=self.virtual_host, credentials=credentials))self.channel = self.connect.channel()  # 客户端连接rabbitmq服务端后开辟管道,每个channel代表一个会话任务def set(self, exchange, routing_key, queue, body):# 创建exchange消息交换机, 并且exchange持久化self.channel.exchange_declare(exchange=exchange, exchange_type='direct', durable=True)# 声明队列, 并且队列持久化self.channel.queue_declare(queue=queue, durable=True)# 通过routing_key 绑定 消息交换机和队列self.channel.queue_bind(queue, exchange, routing_key)# 发消息self.channel.basic_publish(exchange=exchange,routing_key=routing_key,  # 根据exchange和routing进而指定 队列body=body,  # 发送的数据properties=pika.BasicProperties(delivery_mode=2)  # 消息持久化存到硬盘, 1是非持久化)def get(self, exchange, queue, callback):print('消费任务启动')  self.channel.exchange_declare(exchange=exchange, exchange_type='direct', durable=True)self.channel.queue_declare(queue=queue, durable=True)self.channel.basic_consume(queue=queue,  # 队列名on_message_callback=callback,  # 指定回调函数auto_ack=False,  # 关闭自动ack采用手动应答)self.channel.start_consuming()  # 开始接收信息,并进入阻塞状态,队列里有信息才会调用on_message_callback进行处理# 将要发送的消息
a = {"消息内容": "message",}# 实例化的rabbbitmq对象
rabbit_obj = RabbitMQ(username=RabbitMQConfig.username, password=RabbitMQConfig.password, host=RabbitMQConfig.host,port=RabbitMQConfig.port, virtual_host=RabbitMQConfig.vhost)# 发消息
for i in range(20):rabbit_obj.set(RabbitMQConfig.exchange, RabbitMQConfig.routing_key, RabbitMQConfig.queue_name, json.dumps(a))print('生产者发送第 {} 个消息成功 '.format(i))# 开子线程 去监听消费消息
p = threading.Thread(target=rabbit_obj.get,args=(RabbitMQConfig.exchange, RabbitMQConfig.queue_name, callback,))
p.start()print('\n -- 主程序不被阻塞,执行其它操作 --- \n')

四、名词解释

vhost:虚拟主机,一个实例里可以开设多个vhost,用作不同用户的权限分离。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。

名词解释部分 借鉴了其他作者的文章,原文地址Python中RabbitMQ的使用_意大利面拌42号混凝土的博客-CSDN博客_python安装rabbitmq一、简介RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由、缓存、持久化消息。“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者以下简称C,message通过queue由P到C,queue存在于RabbitMQ,可存储尽可能多的message,多个P可向同一queue发送message,多个C可从同一个queuhttps://blog.csdn.net/prigilm/article/details/122416805

python程序使用RabbitMQ相关推荐

  1. 福州python招聘_【Python程序员招聘|Python程序员最新招聘信息】-看准网

    立即投递 职位薪资:6000-10000 经验:不限 学历:不限 类型:全职 linux下python编程 对接ai平台做应用 立即投递 职位薪资:8000-13000 经验:不限 学历:本科 类型: ...

  2. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                      优点:输入一行代码立刻返回结果                       缺点:无法永久保存代码 方法 ...

  3. 【python】一个目录里面多个python程序文件,统计一下里面有多少行代码。即分别列出:代码、空行、注释的行数。

    一个目录里面多个python程序文件,统计一下里面有多少行代码.即分别列出:代码.空行.注释的行数. 题目 代码 结果 题目 一个目录里面多个python程序文件,统计一下里面有多少行代码.即分别列出 ...

  4. python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程

    教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...

  5. 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

    关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...

  6. 在hadoop上运行python_hadoop上运行python程序

    数据来源: http://www.nber.org/patents/acite75_99.zip 首先上传测试数据到hdfs: [root@localhost:/usr/local/hadoop/ha ...

  7. python找不到reshape_如何加速Python程序

    这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即时编译,达到高性能,另外也可以使用cuda GPU的计算能力来加速,对python来 ...

  8. 520 情人节 :属于Python 程序员的脱单攻略大合集(视频版)

    作者| Python 编程时光 责编| Carol 情人节年年有,但今年的 5.20 要比以往的更有意义. 2020.05.20 ,爱你爱你我爱你,如果再卡个时间(13:14),那就是 爱你爱你我爱你 ...

  9. 面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!

    最近几年,Python莫名火了起来,很多公司都想赶上这"莫名"的热潮,招聘到大牛人才.但是,最近一个HR在社交网站的吐槽又火了: 那么问题来了,市面上为什么鲜有企业满意的优秀的Py ...

最新文章

  1. HMM——维特比算法(Viterbi algorithm)
  2. 前端每日实战:60# 视频演示如何用纯 CSS 创作一块乐高积木
  3. Unbalanced calls to begin/end appearance transitions for XXXX
  4. Angular应用里使用import直接导入到应用代码里的class,在运行时的表现
  5. python方法大全参数是对象_向对象方法Python传递太多参数
  6. Python抓取妹子图
  7. 怎么查看当前系统jdk版本
  8. 在google中Flash被屏蔽无法使用
  9. 图片裁剪源代码+php,php进行图片裁剪及生成缩略图程序源代码
  10. Excel表格快捷键的另类用法。
  11. javascript 实现1加到100
  12. 美国最好的计算机工程专业排名,2017年美国大学排名之计算机工程专业排名TOP100...
  13. 2021年高光谱图像文献追踪_ISPRS_V.180_10
  14. html用渐变做彩虹,photoshop如何用渐变制作彩虹
  15. Halcon连接大恒相机
  16. java中ajax是什么意思,java中使用Ajax技术
  17. Vue mounted方法中使用data变量
  18. Jeesite单点登录集成Cas另加自定义登录验证
  19. 解决chrome您的连接不是私密连接
  20. 洛谷P1868 饥饿的奶牛 题解

热门文章

  1. 问卷星自动填写JavaScrip脚本使用教程
  2. VS2013 运行报错:有未经处理的异常 0xC0000005
  3. Python (13) strptime()函数
  4. ORACLE中查询日期格式
  5. UE4 项目优化经验(性能、资源管理、打包等优化)
  6. Ubuntu16.04系统安装后的基本设置以及系统优化
  7. word中目录的设置
  8. 自己配音很难听,声音不好听可以做博主吗
  9. 锐龙R7 5700X 性能怎么样 相当于什么水平
  10. CSS3扇形动画菜单 鼠标滑过扇形展开动画