Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程

这篇具有很好参考价值的文章主要介绍了Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

direct关键字发布订阅模式

基本用法

发布者

import json
from rabbitmq import pika
import rabbitmq

# 建立连接
credentials = rabbitmq.PlainCredentials(
    'zhangdapeng',
    'zhangdapeng520',
)  # mq用户名和密码
connection_target = rabbitmq.ConnectionParameters(
    host='127.0.0.1',
    port=5672,
    virtual_host='/',
    credentials=credentials,
)
connection = rabbitmq.BlockingConnection(connection_target)

# 队列信息
exchange_name = "user_manager_direct"

# 创建管道
channel = connection.channel()

# 声明一个交换机
channel.exchange_declare(exchange=exchange_name, exchange_type=rabbitmq.ExchangeType.direct)

# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
message = json.dumps(user, ensure_ascii=True)
channel.basic_publish(
    exchange=exchange_name,
    routing_key="error",  # 这里不再是队列名了,而是关键字
    body=message.encode('utf8'),
    properties=pika.BasicProperties(delivery_mode=2),  # 声明消息在队列中持久化
)
channel.basic_publish(
    exchange=exchange_name,
    routing_key="info",  # 这里不再是队列名了,而是关键字
    body=message.encode('utf8'),
    properties=pika.BasicProperties(delivery_mode=2),  # 声明消息在队列中持久化
)
print(message)

# 关闭连接
connection.close()

消费者

import rabbitmq
import json

# 创建连接
credentials = rabbitmq.PlainCredentials(
    'zhangdapeng',
    'zhangdapeng520',
)
target = rabbitmq.ConnectionParameters(
    host='127.0.0.1',
    port=5672,
    virtual_host='/',
    credentials=credentials,
)
connection = rabbitmq.BlockingConnection(target)

# 创建管道
channel = connection.channel()

# 队列信息
exchange_name = "user_manager_direct"

# 绑定交换机
channel.exchange_declare(
    exchange=exchange_name,
    exchange_type=rabbitmq.ExchangeType.direct,
)

# 绑定队列
result = channel.queue_declare(
    queue="",  # 这里不要指定队列名
    exclusive=True,
)
queue_name = result.method.queue  # 通过result获取队列名
channel.queue_bind(
    exchange=exchange_name,
    queue=queue_name,
    routing_key="error",  # 可以通过routing_key绑定多个关键字
)
channel.queue_bind(
    exchange=exchange_name,
    queue=queue_name,
    routing_key="info",  # 可以通过routing_key绑定多个关键字
)


def callback(ch, method, properties, body):
    """每次接收到消息的消费回调方法"""
    ch.basic_ack(delivery_tag=method.delivery_tag)
    data = body.decode("utf8")
    print(json.loads(data))


# 开始消费
channel.basic_consume(
    queue=queue_name,
    on_message_callback=callback,
    auto_ack=False,
)
try:
    channel.start_consuming()
finally:
    connection.close()

简化代码

生产者

import json
from rabbitmq import pika
import rabbitmq

# 建立连接
connection = rabbitmq.get_connection()

# 队列信息
exchange_name = "user_manager_direct"

# 创建管道
channel = connection.channel()

# 声明一个交换机
channel.exchange_declare(exchange=exchange_name, exchange_type=rabbitmq.ExchangeType.direct)

# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
rabbitmq.send_json(channel, user, exchange_name, "error")
rabbitmq.send_json(channel, user, exchange_name, "info")

# 关闭连接
connection.close()

消费者

import rabbitmq
import json

# 创建连接
connection = rabbitmq.get_connection()

# 创建管道
channel = connection.channel()

# 队列信息
exchange_name = "user_manager_direct"

# 绑定交换机
channel.exchange_declare(
    exchange=exchange_name,
    exchange_type=rabbitmq.ExchangeType.direct,
)

# 绑定队列
result = channel.queue_declare(
    queue="",  # 这里不要指定队列名
    exclusive=True,
)
queue_name = result.method.queue  # 通过result获取队列名
channel.queue_bind(
    exchange=exchange_name,
    queue=queue_name,
    routing_key="error",  # 可以通过routing_key绑定多个关键字
)
channel.queue_bind(
    exchange=exchange_name,
    queue=queue_name,
    routing_key="info",  # 可以通过routing_key绑定多个关键字
)


def callback(ch, method, properties, body):
    """每次接收到消息的消费回调方法"""
    print(rabbitmq.receive_json(ch, method, body))


# 开始消费
rabbitmq.consume(connection, queue_name, callback)

进一步简化代码

生产者

import rabbitmq

# 建立连接
connection = rabbitmq.get_connection()

# 队列信息
exchange_name = "user_manager_direct"

# 创建管道
channel, _ = rabbitmq.get_direct_channel(connection, exchange_name)

# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
rabbitmq.send_json(channel, user, exchange_name, "error")
rabbitmq.send_json(channel, user, exchange_name, "info")

# 关闭连接
connection.close()

消费者

import rabbitmq
import json

# 创建连接
connection = rabbitmq.get_connection()

# 队列信息
exchange_name = "user_manager_direct"

# 创建管道
channel, queue_name = rabbitmq.get_direct_channel(connection, exchange_name, ["error", "info"])


def callback(ch, method, properties, body):
    """每次接收到消息的消费回调方法"""
    print(rabbitmq.receive_json(ch, method, body))


# 开始消费
rabbitmq.consume(connection, queue_name, callback)

文章来源地址https://www.toymoban.com/news/detail-799171.html

到了这里,关于Python如何操作RabbitMQ实现direct关键字发布订阅模式?有录播直播私教课视频教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python如何操作RabbitMQ实现fanout发布订阅模式?有录播直播私教课视频教程

    生产者 消费者 生产者 消费者 生产者 消费者

    2024年01月17日
    浏览(31)
  • linux 查询 日志 相关操作 及 vim 翻页,检索关键字

    前言:linux 常见操作还是要熟练使用,这里记录一下查询 项目 日志的操作 实时查看打印的日志: tail -f 文件名称 可以实时的查看 日志信息 如果查看其他的日志信息,可以使用vim编辑器 检索 vim 文件名称 进入 vim 模式 shift + :wq可以退出 vim翻页 1.翻整页 Ctrl + f 键 (f 的英文全拼

    2024年02月12日
    浏览(33)
  • AI绘画Midjourney如何写关键字?

    Midjourney 是一款强大的 AI 图像生成工具,只需要简单的自然语言描述就能快速生成图像。 与其他AI图像生成相比,Midjourney学习成本更低,生成速度更快,风格更多样化,是现在接触AI绘画最好的方式之一了。 Midjourney生成图片提示词大致的分为:主体、动作、场景、视角、光

    2024年02月12日
    浏览(26)
  • Python | assert关键字

    Python断言assert是帮助代码流畅的调试工具。断言主要是假设程序员知道或总是希望是真的,因此将它们放在代码中,这样这些失败不会允许代码进一步执行。 简单地说,断言是一个布尔表达式,用来检查语句是True还是False。如果语句为True,则不执行任何操作并继续执行,但

    2024年02月11日
    浏览(42)
  • Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

    对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作         扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件         实际上题目就要求我们对一个指定的目录下的文件进行遍历

    2024年02月13日
    浏览(37)
  • C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)

    C++ operator的使用(重载运算符、仿函数、类型转换操作符) C++11实用技术(一)auto与decltype的使用 C++11实用技术(二)std::function和bind绑定器 C++11实用技术(三)std::future、std::promise、std::packaged_task、async C++11 中,operator 是一个,用于重载运算符。通过重载运算符

    2024年02月14日
    浏览(36)
  • 如何搭建关键字驱动自动化测试框架?

    前言 那么这篇文章我们将了解驱动测试又是如何驱动自动化测试完成整个测试过程的。驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试。驱动的框架的基本工作是将测试用例分成四个不同的部分。首先是测试步骤(

    2024年02月11日
    浏览(37)
  • Nginx 如何根据swagger关键字屏蔽页面

    1.什么是 location Nginx 中通过根据 location 块的规则来将匹配到的 URL 请求进行一系列操作,最常见的就是进行代理。Nginx 中一个 Server 可以有多个 location 配置,当请求在与多个 location 匹配时,会根据一定的 location 匹配规则和优先级来确定具体将请求分发到哪个 location。 2.loca

    2024年02月14日
    浏览(33)
  • python之except关键字

    在python中,except是用于处理异常的,通常与\\\'try\\\'一起使用。异常处理的基本结构是通过try块包裹可能发生异常的代码,然后使用except块捕获和处理可能发生的异常。 如果在try块中发生异常,python会跳转到与异常类型匹配的except块,执行相应的异常处理代码。 示例:

    2024年01月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包