rabbitMQ~工作模式代码实现【基于python pika模块】

这篇具有很好参考价值的文章主要介绍了rabbitMQ~工作模式代码实现【基于python pika模块】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 简单模式

rabbitmq 代码 实现,rabbitMQ必备技术点,rabbitmq,python,分布式

import pika

# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', port=xxx))

# 创建channel
channel = connection.channel()

# 指定队列,如果不存在队列则创建一个新队列
queue_key = 'test_queue'
channel.queue_declare(queue=queue_key)

# 发送消息,消息永远不可能直接发送到队列,一定会先经过交换机
channel.basic_publish(exchange='', routing_key=queue_key, body=b'test')		#简单模式下不是没有交换机,而是使用rabbitMQ默认的交换机


# 接受消息
# 1.回调函数
def callback(ch, method, properties, body):
    print(body)  # b'test'


# 2.消费者接受消息
channel.basic_consume(queue=queue_key,
                      auto_ack=True,
                      on_message_callback=callback)

# 3.消费
channel.start_consuming()
2 工作模式

rabbitmq 代码 实现,rabbitMQ必备技术点,rabbitmq,python,分布式

生产者:
import sys
import pika

# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', port=xxx))

# 创建channel
channel = connection.channel()

# 指定队列,如果不存在队列则创建一个新队列
queue_key = 'test_queue'
channel.queue_declare(queue=queue_key)

# 发送消息
body = 'send {}'.format(sys.argv[1:])
channel.basic_publish(exchange='', routing_key=queue_key, body=body)


#工作模式下,默认情况下,RabbitMQ 会将每条消息发送给下一个消费者,通过平均分配的模式,每个消费者将获得相同数量的消息,这种分发消息的方式称为轮询;


消费者1:
# 1.回调函数
def callback(ch, method, properties, body):
    print(body)


# 2.消费者接受消息
channel.basic_consume(queue=queue_key,
                      auto_ack=True,
                      on_message_callback=callback)

# 3.消费
channel.start_consuming()


消费者2:
# 1.回调函数
def callback(ch, method, properties, body):
    print(body)


# 2.消费者接受消息
channel.basic_consume(queue=queue_key,
                      auto_ack=True,
                      on_message_callback=callback)

# 3.消费
channel.start_consuming()

print信息:
同时启动消费者1与消费者2,然后循环运行生产者发送消息:
>python tt1.py msg1
>python tt1.py msg2
>python tt1.py msg3
>python tt1.py msg4

消费者1:
b"send ['msg1']"
b"send ['msg3']"

消费者2:
b"send ['msg2']"
b"send ['msg4']"
3 发布订阅模式

rabbitmq 代码 实现,rabbitMQ必备技术点,rabbitmq,python,分布式

生产者:
import pika
from pika.exchange_type import ExchangeType

# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost', port=xxx))

# 创建channel
channel = connection.channel()

# 定义交换机
exchange_key = 'test_exchange'
channel.exchange_declare(exchange=exchange_key,
                         exchange_type=ExchangeType.fanout)

# 发送消息,对于扇形交换机 则routing_key可以指定为:''
channel.basic_publish(exchange=exchange_key, routing_key='', body=b'test_msg.')

消费者:
# 队列随机命名,exclusive=True 命名唯一性 一旦消费者链接关闭,队列删除
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
print(queue_name)
# 绑定指定的队列
channel.queue_bind(exchange=exchange_key, queue=queue_name)


# 1.回调函数
def callback(ch, method, properties, body):
    print(body)


# 2.消费者接受消息
channel.basic_consume(queue=queue_name,
                      auto_ack=True,
                      on_message_callback=callback)

# 3.消费
channel.start_consuming()

启动两个消费者与生产者:
1.
amq.gen-yKd-NoMgCUHbWf8qjftSpQ
b'test_msg.'

2.
amq.gen-mPMNWmZL4w3BKogP2Uq4EQ
b'test_msg.'

发布订阅模式使用的是fanout交换机,通过交换机将消息发送给所有的消费者
4 路由模式

rabbitmq 代码 实现,rabbitMQ必备技术点,rabbitmq,python,分布式

生产者:
import pika
from pika.exchange_type import ExchangeType

# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='7.220.225.46', port=5672))

# 创建channel
channel = connection.channel()

# 定义交换机(通过直接交换机)
exchange_key = 'test_exchange'
channel.exchange_declare(exchange=exchange_key,
                         exchange_type=ExchangeType.direct)

# 发送消息,通过直接交换机,绑定消息的路由键通过直接交换机发送到绑定相同路由键的队列
channel.basic_publish(exchange=exchange_key, routing_key='q1', body=b'q1: test_msg.')

rabbitmq 代码 实现,rabbitMQ必备技术点,rabbitmq,python,分布式

5 主题模式

rabbitmq 代码 实现,rabbitMQ必备技术点,rabbitmq,python,分布式文章来源地址https://www.toymoban.com/news/detail-818389.html

生产者:

import pika
from pika.exchange_type import ExchangeType

"""
topic模式routing_key必须是一个单词组合,以"."进行连接
① "*"号代表一个词;
② "#"号代表0个或多个单词;
"""

# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='xxx', port=xxx))

# 创建channel
channel = connection.channel()

# 定义交换机(topic交换机)
exchange_key = 'test_exchange'
channel.exchange_declare(exchange=exchange_key,
                         exchange_type=ExchangeType.topic)

# 发送消息,发送带有routing_key(topic规则的词组)消息
channel.basic_publish(exchange=exchange_key, routing_key='key.q1.value', body=b'q1:test_msg.')		#绑定routing_key:key.q1.value发送消息
channel.basic_publish(exchange=exchange_key, routing_key='key.q2.value', body=b'q2:test_msg.')		#绑定routing_key:key.q2.value发送消息
消费者1:
# 队列随机命名,exclusive=True 命名唯一性 一旦消费者链接关闭,队列删除
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
print(queue_name)
# 绑定指定的队列,指定绑定的交换机,指定绑定的routing_key 
channel.queue_bind(exchange=exchange_key, queue=queue_name, routing_key='*.q1.*')

交换机会按照队列的规则进行消息的转发,将匹配的消息入队 消费者进行消费

# 1.回调函数
def callback(ch, method, properties, body):
    print(body)


# 2.消费者接受消息
channel.basic_consume(queue=queue_name,
                      auto_ack=True,
                      on_message_callback=callback)

# 3.消费
channel.start_consuming()
消费者2:
# 队列随机命名,exclusive=True 命名唯一性 一旦消费者链接关闭,队列删除
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
print(queue_name)
# 绑定指定的队列,指定绑定的交换机,指定绑定的routing_key
channel.queue_bind(exchange=exchange_key, queue=queue_name, routing_key='*.q2.*')


# 1.回调函数
def callback(ch, method, properties, body):
    print(body)


# 2.消费者接受消息
channel.basic_consume(queue=queue_name,
                      auto_ack=True,
                      on_message_callback=callback)

# 3.消费
channel.start_consuming()
打印信息:
消费者1:routing_key='*.q1.*'
amq.gen-KbJ3qpqCJpNVW3ANtZXP4w
b'test_msg.'
b'q1:test_msg.'
b'q1:test_msg.'

消费者2:routing_key='*.q2.*'
amq.gen-3Os4GkVl_5mLd4fzc3dJ2g
b'test_msg.'
b'q2:test_msg.'
b'q2:test_msg.'
b'q2:test_msg.'
b'q2:test_msg.'

到了这里,关于rabbitMQ~工作模式代码实现【基于python pika模块】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Python_Selenium学习笔记(三)】基于Selenium模块实现无界面模式 & 执行JS脚本(把滚动条拉到底部)

    此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本(把滚动条拉到底部),并以具体的示例进行展示。 创建浏览器对象之前,创建 options 功能对象 : options = webdriver.ChromeOptions() 添加无界面功能参数: options.add_argument(\\\"--headless\\\") 构造浏览器对象,打开浏览器,并

    2024年02月06日
    浏览(49)
  • 【图解RabbitMQ-7】图解RabbitMQ五种队列模型(简单模型、工作模型、发布订阅模型、路由模型、主题模型)及代码实现

    🧑‍💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······ 😎人生感悟:尝尽人生百味,方知世间冷暖。

    2024年02月07日
    浏览(34)
  • RabbitMQ工作模式-工作队列

    官网关于工作模式的解释地址:https://www.rabbitmq.com/getstarted.html Work Queue(工作队列) 生产者发消息,启动多个消费者来消费消息,每个消费者仅消费部分消息,可达到负载均衡的效果。 创建生产者 创建消费者 首先运行消息费,为了测试工作队列模式,消费都需要启动多个,

    2024年02月10日
    浏览(24)
  • RabbitMQ工作模式-主题模式

    主题模式 官方文档参考:https://www.rabbitmq.com/tutorials/tutorial-five-python.html 使用topic类型的交换器,队列绑定到交换器、bingingKey时使用通配符,交换器将消息路由转发到具体队列时,会根据消息routingKey模糊匹配,比较灵活。 在Direct类型的交换器做到了根据日志级别的不同,将消

    2024年02月10日
    浏览(26)
  • RabbitMQ工作模式-路由模式

    官方文档参考:https://www.rabbitmq.com/tutorials/tutorial-four-python.html 使用 direct 类型的Exchange,发N条消息并使用不同的routingKey,消费者定义队列并将队列 routingKey 、Exchange绑定。此时使用 direct 模式Exchange必须要 routingKey 完成匹配的情况下消息才会转发到对应的队列中被消费。 样例使用

    2024年02月10日
    浏览(23)
  • RabbitMQ的工作模式

    RabbitMQ 的工作模式 一 .simple 模式(即最简单的收发模式) 二 .work 工作模式 ( 资源的竞争 ) publish_subscribe 发布订阅 (../../../../../0 马士兵 / 新建文件夹 /BAT 面试突击资料 (1)/ 整理 /BAT 面试突击资料 /15- 消息中间件 MQ 面试题( 2020 最新 版) .assets/publish_subscribe 发布订阅 ( 共享资

    2024年02月06日
    浏览(61)
  • RabbitMQ 工作模式介绍

    RabbitMQ 是一个消息代理:它接受并转发消息。您可以将其视为邮局:当您将要邮寄的邮件放入邮箱时,您可以确定信使最终会将邮件交付给您的收件人。在这个类比中,RabbitMQ是一个邮政信箱,一个邮局和一个信件载体。 RabbitMQ 和邮局之间的主要区别在于它不处理纸张,而是

    2024年02月06日
    浏览(30)
  • RabbitMQ五大常用工作模式

    消息生产者 消息消费者(会一直监听队列) 工作队列 消息生产能力大于消费能力,增加多个消费节点 和简单队列类似,增加多个消费节点,处于竞争关系 默认策略:round robin轮训 生产者 消费者1 消费者2 轮训策略验证 先启动两个消费者,再启动生产者 缺点:存在部分节点

    2024年02月19日
    浏览(29)
  • RabbitMQ:工作队列模式

    📃个人主页:不断前进的皮卡丘 🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 🔥个人专栏:消息中间件 工作队列(又名: 任务队列 )背后的主要思想是避免立即执行资源密集型任务并等待其完成。相反

    2024年01月23日
    浏览(29)
  • RabbitMQ 各种通信模式的Python实现

    RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。支持多种客户端,如:Python、Java、Javascript、C#、C/C++,Go等,支持AJAX,持久化存储。可用于进程之间、分布式系统、异系统之间通信、工作流等。 RabbitMQ支持很多通讯协议,包

    2024年04月26日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包