文章目录

  • 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应用相关推荐

  1. python report_ReportPortal(自动化报表统一平台)的搭建与python推送

    ReportPortal(自动化报表统一平台)的搭建与python推送 ReportPortal(自动化报表统一平台)的搭建与python推送 项目地址 GIT:https://github.com/ ...

  2. NVIDIA专家实战演示,教你快速搭建基于Python的车辆信息识别系统

    主讲人 | 何琨 英伟达 量子位编辑 | 公众号 QbitAI 随着智慧城市.自动驾驶的快速落地,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 近日,在英伟达x量子位发起的 ...

  3. CV公开课报名 | 快速搭建基于Python的车辆信息识别系统

    位来 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 时下,智慧城市和自动驾驶快速发展,车辆的检测和识别应用场景非常广泛,如车牌识别.车流统计.车辆属性识别等. 但是从0搭建一个精度高.速度快的 ...

  4. Windows下Eclipse和PyDev搭建完美Python开发环境

    Windows下Eclipse和PyDev搭建完美Python开发环境 之前安装Eclipse,JDK,Python什么的就不说了.直接从安装PyDev开始(借用了几张别人的图): 打开Eclipse ...

  5. ubuntu搭建【python】运行环境

    [实施工程师]ubuntu搭建[python]运行环境 目录 [实施工程师]ubuntu搭建[python]运行环境 下载[pycharm]包 ​解压[pycharm]包 执行[pycharm]安装 ...

  6. python人工智能入门优达视频_python入门视频教你搭建机器学习Python环境的正确姿势...

    为机器学习搭建好Python环境听起来简单,但有时候坑还不少.如果此前没有配置过类似的环境,很可能会苦苦折腾各种命令好几个小时.可是我明明只是想马上搞起来我的机器学习! 在优达学城(Udacity)此 ...

  7. 使用Rabbitmq搭建MQTT 代理服务器(broker)

    学习目标 理解RabbitMQ和MQTT的相关概念 使用RabbitMQ搭建MQTT服务器 掌握RabbitMQ服务器相关的配置 使用网上现有的软件工具对RabbitMQ服务器进行测试 阅读Rabbi ...

  8. 从网页搭建入门python web_从网页搭建入门JavaWeb

    实战 Vue.js 源码全方位深入解析 Python 爬虫工程师必学--App数据抓取实战 Spring Cloud微服务实战 Vue2.5开发去哪儿网App 从零基础入门到实战项目 FFmpeg音视 ...

  9. Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)

    摘要:本文讲解了用Eclipse和PyDev搭建Python的开发环境. 十一长假在家闲着没事儿,准备花点时间学习一下Python. 今儿花了一个下午搭建Python的开发环境,不禁感叹----开源的 ...

最新文章

  1. Yii2 使用 Beanstalk 队列系统
  2. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】
  3. IE工具条不能自动显示
  4. es6学习笔记-module_v1.0_byKL
  5. .net 小问题集合
  6. java实现断点续传_Android 强升逻辑和实现
  7. javaweb学习总结(四十五)——监听器(Listener)学习二
  8. python目标跟踪精度曲线图_Python+opencv3.4+Kalman滤波在视频中跟踪绘制运动目标,Pythonopencv34kalman,卡尔曼滤波,实现,物体,追踪,和,轨迹...
  9. 拖拽自动生成的DataGridView和BindingSource操作数据库(增加,修改,删除)---自己实现...
  10. java B2B2C源码电子商务平台 --zuul跨域访问问题
  11. 电脑扫描文件怎么弄_彻底清除手机垃圾文件,释放内存的方法
  12. 【Keras】使用数据生成器(data generators)解决训练数据内存问题
  13. 5. jQuery 效果 - 隐藏和显示
  14. jsp:setProperty getProperty标签的使用
  15. 【值得收藏】10个实现炫酷UI前端效果的CSS生成工具
  16. 计算机 仿真 流体力学剪切应力,基于人体血管B型主动脉夹层三维建模及血流动力学仿真研究...
  17. NXP推出Icode DNA芯片,助力产品防伪鉴定
  18. KEIL5芯片包器件库的下载
  19. scp构造端口_scp端口号(scp默认端口号)
  20. ANX9833|硅谷数模ANX9833方案电路|ANX9833中文设计资料|ANX9833代理

热门文章

  1. java 使用xml生成word_Java+freemaker+xml生成word模板
  2. 小熊派bearpi-HM-nano(hi3861鸿蒙LiteOS)点亮WS2812灯板(spi方式)
  3. AMD64架构和EM64T架构
  4. mysql设置主键的作用_mysql设置主键有什么用
  5. flutter安装开发环境-问题记录
  6. 天气学诊断实习一 露点和凝结抬升高度的计算
  7. 如何烘焙导出有动作的fbx Maya
  8. 双均线策略构建及回测
  9. 实现Unity声音的立体空间感
  10. 3D游戏编程学习笔记(五):与游戏世界交互