当前位置: 首页 > java >正文

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例

  • 0.RabbitMQ官网通信模式
  • 1.Simplest(简单)模式
    • 1.1 发送端
    • 1.2 接收端

0.RabbitMQ官网通信模式

在这里插入图片描述

1.Simplest(简单)模式

1.1 发送端

# -*- coding: utf-8 -*-
"""
Author: xxx
date:   2025/5/19 11:30
Description:    Simaple简单模式,生产者简单的RabbitMQ消息队列(不安全,不能持久化)
"""import pika# RabbitMQ 服务器地址
rabbitmq_host = '192.168.120.19'
# RabbitMQ 服务器端口
rabbitmq_port = 5672
# RabbitMQ 用户名
rabbitmq_username = 'rabbitmq'
# RabbitMQ 密码
rabbitmq_password = 'rabbitmq@123'# 根据用户名和密码,创建凭证对象
credentials = pika.PlainCredentials(rabbitmq_username, rabbitmq_password)
# 创建连接参数对象,指定主机、端口、凭证等信息
connection = pika.BlockingConnection(pika.ConnectionParameters(host=rabbitmq_host,port=rabbitmq_port,credentials=credentials)
)
# 创建通道对象
channel = connection.channel()# 定义消息队列名称
queue_name = 'hello'
# 声明消息队列,如果没有队列会自动创建
channel.queue_declare(queue=queue_name
)# 定义消息内容
message = 'Hello, World!'
# 发布消息到消息队列,routing_key为队列名称,body为消息内容,properties为属性,其中delivery_mode为2表示持久化
channel.basic_publish(exchange='',routing_key=queue_name,body=message
)
print(" [x] Sent '{}'".format(message))# 关闭通道和连接
connection.close()

1.2 接收端

# -*- coding: utf-8 -*-
"""
Author: tanggaomeng
date:   2025/5/19 11:44
Description:    Simaple简单模式,消费者简单的RabbitMQ消息队列(不安全,不能持久化)
"""import pika# RabbitMQ 服务器地址
rabbitmq_host = '192.168.120.19'
# RabbitMQ 服务器端口
rabbitmq_port = 5672
# RabbitMQ 用户名
rabbitmq_username = 'rabbitmq'
# RabbitMQ 密码
rabbitmq_password = 'rabbitmq@123'# 根据用户名和密码,创建凭证对象
credentials = pika.PlainCredentials(rabbitmq_username, rabbitmq_password)
# 创建连接参数对象,指定主机、端口、凭证等信息
connection = pika.BlockingConnection(pika.ConnectionParameters(host=rabbitmq_host,port=rabbitmq_port,credentials=credentials)
)
# 创建通道对象
channel = connection.channel()# 定义消息队列名称
queue_name = 'hello'
# 声明消息队列,如果没有队列会自动创建
channel.queue_declare(queue=queue_name
)# 将ReceivedMessage添加到队列中,同时替换通道实现。
# 返回的结果,会返回到这里面,如果有兴趣可以点开basic_consume方法去看看源代码
# 订阅消息队列,设置自动应答(auto_ack=False),并指定回调函数
def callback(ch, method, properties, body):print(" [x] Received %r" % (body,))# 从服务器队列中消费
# no_ack=True ,是需要是否确定消息的处理了,告诉服务端
# no_ack=False ,默认是False,可以不写
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=False)print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()'''
注意:接收到处于死循环,一直在等待接收,发送一个数据,就收到一个数据
'''
基于上面的代码不做任何修改
把上面的消费者开N个就是想要的结果。
如下:
运行3个消费者,生产者生成的消息队列依次被接收者接收,每次只有一个消费者接收到信息,3个消费者接收顺序依次进行

在这里插入图片描述

参考:
https://www.rabbitmq.com/tutorials

http://www.xdnf.cn/news/7187.html

相关文章:

  • Codeforces 1017 Div4(ABCDEFG)
  • 【第三十六周】LoRA 微调方法
  • 09 错误代码重定向
  • 三:操作系统线程管理之线程概念
  • 数据库触发器Trigger
  • Hugo 安装保姆级教程(搭建个人blog)
  • 2025.05.17得物机考笔试真题第三题
  • UESplineThicken节点
  • Android开发-翻页类视图
  • 中文分词与数据可视化03
  • 【2025版】OpenFeign快速入门
  • Cursor:简单三步提高生成效率
  • HJ5 进制转换【牛客网】
  • 工作流介绍
  • TIMER免疫浸润分析
  • 谷歌地球引擎GEE将多个遥感影像作为多个波段合并成一张图像并下载的方法
  • C++ deque大小操作、deque数据插入、deque数据删除
  • Linux学习笔记|GCC编译指令基础|静动态库|makefile
  • KAG:通过知识增强生成提升专业领域的大型语言模型(五)
  • Python异常处理与OOP深度解析及实战案例
  • 软件调试纵横谈-18-页堆
  • Java程序员学AI(一)
  • [强化学习的数学原理—赵世钰老师]学习笔记02-贝尔曼方程-下
  • Python 从列表中删除值的多种实用方法详解
  • C++学习:六个月从基础到就业——C++17:std::optional/variant/any
  • 玄机-第一章 应急响应-Linux日志分析
  • LoRA微调的参数学习
  • 1-机器学习的基本概念
  • 浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
  • 电子电路:什么是电子电路中的噪声?为什么会产生噪声?噪声全部是负面影响吗?