rabbitmq搭建与python应用
文章目录
- Rabbitmq
- Rabbitmq简介
- Rabbitmq整体架构
- Rabbitmq的安装
- Pika
- 初始化
- 创建队列
- 发送消息
- 接收消息
- 推模式
- 拉模式
- 创建交换器
- 绑定队列
Rabbitmq
Rabbitmq简介
Rabbitmq是一个应用较广的消息中间件,凭借其高可靠、易扩展、高可用以及丰富的功能特性在很多行业得到了广泛应用。
什么是消息中间件?消息中间件是利用高效可靠的机制进行与平台无法的数据交流,可以在分布式环境下扩展进程间的通信。在分布式、微服务应用越发广泛的今天,消息中间件已经成为了一名开发者必须熟悉的技能。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。
Rabbitmq整体架构
生产者:消息的发送方。
消费者:消息的接收方。
Broker:rabbitmq的服务节点,其中包括了交换器与队列。
队列:rabbitmq的内部对象,消息的存储位置。
交换器:复制消息的转发,根据相关的配置将生产者产生的消息转发至队列中。
Rabbitmq的安装
宿主机部署:
yum install erlang
yum install rabbitmq-server
systemctl start rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
centos上使用yum管理软件包,如果服务器是ubuntu需要换成apt。另外较老系统中使用service管理本机服务,需要使用service命令启动rabbitmq服务。
容器部署:
docker run -p 15672:15672 -p 5672:5672 -it --name rabbitmq_server -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.9.22-management
-p将宿主机端口映射到容器上,后面可以直接通过宿主机的端口访问rabbitmq服务。
–name指定容器名称。
-e参数修改容器环境变量,这里修改的rabbitmq的用户名和密码,不同的容器存在不同的环境变量,这个有兴趣的可以dockerhub上查看了解。
这里指定的容器tags为3.9.22-management,带management的是附带了web控制台的镜像,一般推荐使用这种。部署之后可以通过访问控制台,进入rabbitmq的管理页面。
另外目前可以更多需要K8s微服务部署集群的场景,这种场景部署较复杂,这里不做讨论。
Pika
这里的pika指的不是那个类redis 存储系统,而是python中操作rabbitmq的三方库。(Pika is a RabbitMQ client library for Python.)
初始化
import pika
# 设置用户名密码
user_info = pika.PlainCredentials('username', 'password')
# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters('host', port, '/', user_info))
# 创建一个channel
channel = connection.channel()
在操作rabbitmq之前,都需要通过认证,创建channel,之后的操作都是建立在channel之上的。
创建队列
import pika
# 设置用户名密码
user_info = pika.PlainCredentials('guest', 'xxxx')
# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters('xxxx', 5672, '/', user_info))
# 创建一个channel
channel = connection.channel()
# 创建队列,存在就跳过
channel.queue_declare(queue='test_queue')
queue_declare这个方法,遇到队列已存在,会自动跳过创建步骤,推荐在发送消息之前,可以加上。
运行之后,可以在web页面看到新创建的这个队列信息。
发送消息
channel.basic_publish(exchange='',routing_key='test_queue',body='hello queue'.encode("utf-8"))
exchange为空,使用rabbitmq的默认交换器,
routing_key路由键,默认交换器使用全匹配,即队列名称。
body消息体,bytes类型。
发送之后,可以从网页查看到队列中的消息数。
接收消息
推模式
# 回调函数
def callback(ch, method, properties, body):print('消息内容为:%s' % format(body))channel.basic_consume(queue='test_queue',auto_ack=True,on_message_callback=callback)channel.start_consuming()
queue指定,监听的队列。
auto_ack:接收到消息之后自动ack确定。
on_message_callback:设置获取到消息时的回调地址。
推模式消费者将会处于堵塞状态,一直等待消息的到来。
输出内容:
消息内容为:b'hello queue'
此时再从网页查看队列状态,可以看到消息数回到0。
拉模式
method_frame, header_frame, body = channel.basic_get("test_queue", auto_ack=True)
if method_frame:print(method_frame, header_frame, body) # 收到的全部数据 就要bodyprint('消息内容为:%s' % body)
else:print('没有收到消息')
basic_get拉模式,由消费者自主控制,什么时候去获取消息。第一个参数为队列名称。
输出结果:
消息内容为:b'hello queue'
创建交换器
channel.exchange_declare(exchange='test_exchange', exchange_type='direct')
exchange:设置交换器的名称
exchange_type:设置交换器的类型,
class ExchangeType(Enum) :direct = 'direct'fanout = 'fanout'headers = 'headers'topic = 'topic'
目前rabbitmq交换器支持上面这四种类型。具体的区别与用法将在其它文章种做详细介绍。创建交换器和创建队列一样,当遇到已经创建的情况,会自动跳过。创建成功之后,可以在网页看到交换器的信息。
绑定队列
创建完队列和交换器之后,需要使用绑定键,将队列和交换器建立绑定关系。
channel.queue_bind(exchange='test_exchange', queue='test_queue')
exchange:绑定交换器的名称
queue:绑定队列的名称
routing_key:绑定键名称,默认为队列的名称。(这种使用方法在实际应用种较为常见)
绑定之后,可以在网页查看到绑定的信息。
rabbitmq搭建与python应用相关推荐
- python report_ReportPortal(自动化报表统一平台)的搭建与python推送
ReportPortal(自动化报表统一平台)的搭建与python推送 ReportPortal(自动化报表统一平台)的搭建与python推送 项目地址 GIT:https://github.com/ ...
- NVIDIA专家实战演示,教你快速搭建基于Python的车辆信息识别系统
主讲人 | 何琨 英伟达 量子位编辑 | 公众号 QbitAI 随着智慧城市.自动驾驶的快速落地,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 近日,在英伟达x量子位发起的 ...
- CV公开课报名 | 快速搭建基于Python的车辆信息识别系统
位来 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 时下,智慧城市和自动驾驶快速发展,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 但是从0搭建一个精度高.速度快的 ...
- Windows下Eclipse和PyDev搭建完美Python开发环境
Windows下Eclipse和PyDev搭建完美Python开发环境 之前安装Eclipse,JDK,Python什么的就不说了.直接从安装PyDev开始(借用了几张别人的图): 打开Eclipse ...
- ubuntu搭建【python】运行环境
[实施工程师]ubuntu搭建[python]运行环境 目录 [实施工程师]ubuntu搭建[python]运行环境 下载[pycharm]包 解压[pycharm]包 执行[pycharm]安装 ...
- python人工智能入门优达视频_python入门视频教你搭建机器学习Python环境的正确姿势...
为机器学习搭建好Python环境听起来简单,但有时候坑还不少.如果此前没有配置过类似的环境,很可能会苦苦折腾各种命令好几个小时.可是我明明只是想马上搞起来我的机器学习! 在优达学城(Udacity)此 ...
- 使用Rabbitmq搭建MQTT 代理服务器(broker)
学习目标 理解RabbitMQ和MQTT的相关概念 使用RabbitMQ搭建MQTT服务器 掌握RabbitMQ服务器相关的配置 使用网上现有的软件工具对RabbitMQ服务器进行测试 阅读Rabbi ...
- 从网页搭建入门python web_从网页搭建入门JavaWeb
实战 Vue.js 源码全方位深入解析 Python 爬虫工程师必学--App数据抓取实战 Spring Cloud微服务实战 Vue2.5开发去哪儿网App 从零基础入门到实战项目 FFmpeg音视 ...
- Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)
摘要:本文讲解了用Eclipse和PyDev搭建Python的开发环境. 十一长假在家闲着没事儿,准备花点时间学习一下Python. 今儿花了一个下午搭建Python的开发环境,不禁感叹----开源的 ...
最新文章
- Yii2 使用 Beanstalk 队列系统
- Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
- IE工具条不能自动显示
- es6学习笔记-module_v1.0_byKL
- .net 小问题集合
- java实现断点续传_Android 强升逻辑和实现
- javaweb学习总结(四十五)——监听器(Listener)学习二
- python目标跟踪精度曲线图_Python+opencv3.4+Kalman滤波在视频中跟踪绘制运动目标,Pythonopencv34kalman,卡尔曼滤波,实现,物体,追踪,和,轨迹...
- 拖拽自动生成的DataGridView和BindingSource操作数据库(增加,修改,删除)---自己实现...
- java B2B2C源码电子商务平台 --zuul跨域访问问题
- 电脑扫描文件怎么弄_彻底清除手机垃圾文件,释放内存的方法
- 【Keras】使用数据生成器(data generators)解决训练数据内存问题
- 5. jQuery 效果 - 隐藏和显示
- jsp:setProperty getProperty标签的使用
- 【值得收藏】10个实现炫酷UI前端效果的CSS生成工具
- 计算机 仿真 流体力学剪切应力,基于人体血管B型主动脉夹层三维建模及血流动力学仿真研究...
- NXP推出Icode DNA芯片,助力产品防伪鉴定
- KEIL5芯片包器件库的下载
- scp构造端口_scp端口号(scp默认端口号)
- ANX9833|硅谷数模ANX9833方案电路|ANX9833中文设计资料|ANX9833代理