pika详解(四) channel 通道

消息中间件 - RabbitMQ - Python pika 目录 零、RabbitMQ 总结 0-1 channel 0-2 Exchange、Queue、Route 三者的关系和交互 一、轮询消费模式 1-1 生产者 1-2 消费者 二、队列持久化 三、广播模式 - ECHANGE 3-1 fanout - 转发速度最快 3-1-1消费者(订阅者) 3-1-2 生产者(发布者) 3-2 direct - 路由键的完全匹配分发 ... 阅读详情

channel通道

通道是在connection建立后进行创建分配的,有利于connection重用

官方建议通过connection的channel() 方法进行创建

方法/参数:

  1. add_callback(callback, replies, one_shot=True)

    从 RabbitMQ broker 收到消息,在回复列表中,则调用回调函数,为replies列表添加回调函数

    参数:
    callback (callable)– 回调函数
    replies (list) –callback 回调列表
    one_shot (bool) – 只处理第一种类型的回调

  2. add_on_cancel_callback(callback)

    服务器发送basic_cancel时调用的回调函数

  3. add_on_close_callback(callback)

    通道关闭时调用的回调函数

  4. add_on_flow_callback(callback)

    远程服务器调用Channel.Flow时调用的回调函数

  5. add_on_return_callback(callback)

    basic_publish发送一条已被服务器拒绝并返回的消息时调用

  6. basic_ack(delivery_tag=0, multiple=False)
    参数:

    delivery_tag (整数) – 服务器分配的传递标记

    multiple 布尔值, 是否允许确认多条

  7. basic_cancel(consumer_tag='', callback=None)

    取消一个consumer, 不影响delivered 已经发送的消息,但这意味着rabbitmq broker不再向该consumer发送消息

    consumer_tag 消费者的标识符

  8. basic_consume(queue, on_message_callback, auto_ack=False, exclusive=False, consumer_tag=None, arguments=None, callback=None)
    参数:
    queue (str) – 队列名称
    on_message_callback (callable) –回调函数, 回调的定义on_message_callback(channel, method, properties, body)
    auto_ack (bool)–是否自动确认, 默认不自动确认消息
    exclusive (bool)– 排他队列, 是否允许在队列中允许还有其他的consumer消费者
    consumer_tag (str)– consumer的标志符
    arguments (dict) – 消费者的自定义键/值对参数
    callback (callable)– callback(pika.frame.Method) for method Basic.ConsumeOk.

  9. basic_get(queue, callback, auto_ack=False)

    获取单条消息

    参数:
    queue (str)– 队列名称
    callback (callable)–回调函数, 回调定义callback(channel, method, properties, body),
    auto_ack (bool)– 自动消息确认

  10. basic_nack(delivery_tag=None, multiple=False, requeue=True)

    允许客户端拒绝一个或多个传入消息。它可用于中断和取消大量传入消息,或将无法处理的消息返回到其原始队列

    参数:
    delivery-tag (integer) – int/long 服务器分配的 delivery id
    multiple (bool) –是否允许多条
    requeue (bool) – 如果requeue为true,服务器将尝试重新排队该消息。如果requeue为false或重新排队尝试失败,则丢弃或删除消息

  11. basic_publish(exchange, routing_key, body, properties=None, mandatory=False)

    发送消息

    参数:

    exchange (str)– 交换机名称
    routing_key (str) – 路由键, 与交换机类型有关, topic 可以使用匹配规则, direct 则需要指定准确的路由键, 否则消息会被丢弃,或者返回给consumer, fanout则可以使用空字符"", 广播到交换机下的队列
    body (bytes) – 消息内容
    properties (pika.spec.BasicProperties) – Basic.properties 消息属性
    mandatory (bool) – 强制性标志, 设置broker对于没有投递成功消息的处理机制:

    如果exchange根据自身类型和消息routingKey无法找到一个合适的queue存储消息,
    那么broker会调用basic.return方法将消息返还给生产者;当mandatory设置为false时,
    出现上述情况broker会直接将消息丢弃

  12. basic_qos(prefetch_size=0, prefetch_count=0, global_qos=False, callback=None)

参数:

  • prefetch_size - 该字段指定预取窗口大小。如果服务器的大小等于或小于可用的预取大小(并且也属于其他预取限制),则它将提前发送消息。可以设置为零,意味着“没有特定限制”,尽管其他预取限制可能仍然适用。启用no-ack选项的使用者将忽略prefetch-size。

  • prefetch_count- 根据整个消息指定预取窗口。该字段可以与预取大小字段结合使用; 如果预取窗口(以及通道和连接级别的窗口)都允许,则只会提前发送消息。启用no-ack选项的使用者将忽略prefetch-count。

  • global_qos - QoS是否适用于频道上的所有消费者

  • callbackcallable) - 调用Basic.QosOk响应的回调

  1. basic_reject(delivery_tag, requeue=True)

    拒绝传入的消息。此方法允许客户端拒绝消息。它可用于中断和取消大量传入消息,或将无法处理的消息返回到其原始队列参数:
    delivery-tag (integer)– 分配的tag
    requeue (bool)–如果requeue为true,服务器将尝试重新排队该消息。如果requeue为false或重新排队尝试失败,则丢弃或删除消息

  2. basic_recover(requeue=False, callback=None)

    要求服务器重新传送指定通道上的所有未确认消息,可以重新传递零个或多个消息

  3. close(reply_code=0, reply_text='Normal shutdown')

关闭
  1. confirm_delivery(ack_nack_callback, callback=None)
开启通道 中的确认模式, 当consumer接收或者拒绝消息的时候会调用
  1. consumer_tags

    返回当前活动使用者列表的属性方法

  2. exchange_bind(destination, source, routing_key='', arguments=None, callback=None)

交换机绑定, 将一个交换机绑定到另外一个交换机

参数:

`destination`(str) - 要绑定的目标交换
`source(str)` - 要绑定的源交换
`routing_key`(str) - 要绑定的路由键
`arguments`(dict) - 绑定的自定义键/值对参数
`callback`(callable) - 方法Exchange.BindOk的回调(pika.frame.Method)
  1. exchange_declare(exchange, exchange_type='direct', passive=False, durable=False, auto_delete=False, internal=False, arguments=None, callback=None)

声明交换机

参数:
exchange(str) – 交换机名称
exchange_type (str) – 交换机类型, 一般使用topic(主题交换机), direct, fanout(广播交换机)
passive (bool) – 执行检察或者只是检察是否存在, 默认为false, 即是,如果不存在则会创建交换机
durable (bool) – 是否持久化,决定了在rabbitmq重启后该交换机是否存在
auto_delete (bool) –自动删除
internal (bool)– 内部,只能由其他exchanges进行发布
arguments (dict)– 交换的自定义键/值对参数
callback (callable)– 方法Exchange.DeclareOk的回调(pika.frame.Method)

  1. exchange_delete(exchange=None, if_unused=False, callback=None)

    删除交换机

    参数:
    exchange (str) – 交换机删除
    if_unused (bool) – 在没有使用时删除
    callback (callable)–Exchange.DeleteOk 消息的回调

  2. exchange_unbind(destination=None, source=None, routing_key='', arguments=None, callback=None)

取消与另一个交换机的绑定

参数:

  • destination - 取消绑定的目标交换
  • source - 取消绑定的源交换
  • routing_key - 解除绑定的路由键
  • arguments - 绑定的自定义键/值对参数
  • callbackcallable) - 方法Exchange.UnbindOk的回调(pika.frame.Method)
  1. flow(active, callback=None)

关闭和打开通道流量控制

参数:
active (bool)– Turn flow on or off
callback (callable)– callback(bool) upon completion

  1. is_closed
  2. is_closing
  3. is_open
  4. open()
  5. queue_bind(queue, exchange, routing_key=None, arguments=None, callback=None)

将队列绑定到交换机

参数:
queue(str) - 绑定到交换的队列
exchange(str) - 要绑定的源交换
routing_key(str) - 要绑定的路由键
arguments(dict) - 绑定的自定义键/值对参数
callback(callable) - 方法Queue.BindOk的回调(pika.frame.Method)

  1. queue_declare(queue, passive=False, durable=False, exclusive=False, auto_delete=False, arguments=None, callback=None)
声明队列

参数:
`queue (str)` – 队列名称
`passive (bool) `– 只检察队列是否存在,默认false
`durable (bool)` – 是否持久化队列,以便在重启rabbitmq时候队列能够恢复
`exclusive (bool)` – 排他队列,只允许在该连接connection中使用
`auto_delete (bool) `– 断开连接时候是否自动删除
`arguments (dict) `–  队列的自定义键/值参数
`callback (callable)` – 方法Queue.DeclareOk的回调(pika.frame.Method)
  1. queue_delete(queue, if_unused=False, if_empty=False, callback=None)
删除队列

参数:
`queue (str)` – 队列名称
`if_unused (bool)` – 未使用才删除
`if_empty (bool)` – 是否是空的时候才删除
`callback (callable)` –方法Queue.DeleteOk的回调(pika.frame.Method)
  1. queue_purge(queue, callback=None)

    清除队列的所有消息

    queue (str) –队列名称
    callback (callable) – 方法Queue.PurgeOk的回调(pika.frame.Method)

  2. queue_unbind(queue, exchange=None, routing_key=None, arguments=None, callback=None)

    解除队列绑定

    queue (str)– 队列名称
    exchange (str) – 交换机名称
    routing_key (str) – 路由键
    arguments (dict)– 绑定的自定义键/值对参数
    callback (callable) – 方法Queue.UnbindOk的回调(pika.frame.Method)

  3. tx_rollback(callback=None)

  4. tx_select(callback=None)

  5. tx_rollback(callback = None)

AMQP协议——(5)channel 本文分析了AMQP消息队列系统的架构示意图,重点解析了消息从生产者到消费者的流动路径。示意图展示了生产者通过交换器将消息路由到队列,最终由消费者消费的过程。特别强调了连接(Connection)通道(Channel)的作用:一个TCP连接可创建多个轻量级通道,实现多路复用,提高效率。文章详细说明了通道的工作原理,包括多路复用机制、隔离性和资源管理特性,并通过Python代码示例演示了通道的创建和使用过程。这种设计有效减少了网络开销,特别适合高并发场景下的消息处理需求。 阅读详情

相关推荐

分布式消息队列 — RabbitMQ(3)

目录目录 前文列表 前言 通道 Channel 一个基本的生产者消费者模式消费者 生产者 运行结果 应用预取计数 应用 ACK 机制 最后前文列表快速入门分布式消息队列之 RabbitMQ(1) 快速入门分布式消息队列之 RabbitMQ(2)前言在前文列表中,分别介绍了 RabbitMQ 的对象概念及其关键特性,本篇将通过编程的方式来回溯这些知识点,从实践应用的角度继续深入 RabbitMQ。安

烟云的计算 2179

python框架pika的基本使用

Python操作RabbitMqpika--队列)安装使用其他读取方法 安装 pip install pika 使用 import pika # 建立连接 # user:账号 pwd:密码 userx = pika.PlainCredentials(user, pwd) # hosh:rabbitmq所在的ip port: 端口号 parameters = pika.ConnectionParameters(host, int(port), '/', credentials=userx) conn = p

qq_44985692的博客 4905

解决python3 pika之连接断开的问题

今天小编就为大家分享一篇解决python3 pika之连接断开的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

RabbitMQ之basicConsume、basicCancel、basicPublish等方法详解

最新版5.7.3提供了20个basicConsume消费方法,这些方法是由服务端主动PUSH消息过来,方法接收到消息后进行处理;而每个方法处理接收到的消息相差不大,下面详细介绍每个方法的参数详情; 1.String basicConsume(String queue, boolean autoAck, DeliverCallback deliverCallback, CancelCallbac...

OceanSky的专栏 2万+

RabbitMq基础篇-09-channel接口常用几种参数详解

为了保证消息从队列可靠地达到消费者, RabbitMQ 提供了消息确认机制( message acknowledgement), 消费者在订阅队列时,可以指定autoAck参数,当autoAck 等于false时,RabbitMQ会等待消费者显式地回复确认信号后才从内存(或者磁盘)中移去消息(实质上是先打上删除标记,之后再删除)。当autoAck 等于true时,RabbitMQ 会自动把发送出去的消息置为确认, 然后从内存(或者磁盘)中删除,而不管消费者是否真正地消费到了这些消息。

Alan0517 1万+

Prefetch count--预取数量

一、前言   前面提到如果有多个消费者同时订阅同一个Queue中的消息,Queue中的消息会被平摊给多个消费者。这时如果每个消息的处理时间不同,就有可能会导致某些消费者一直在忙,而另外一些消费者很快就处理完手头工作并一直空闲的情况。我们可以通过设置prefetchCount来限制Queue每次发送给每个消费者的消息数,比如我们设置prefetchCount=1,则Queue每次给每个消费者发送一...

weixin_30312557的博客 510

RabbitMQ--RabbitMQ-C客户端使用说明

(一)基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发。我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍。 几个概念说明: Broker:简单来说就是消息队列服务器实体。 Exchange:消息

qq_17812167的博客 3349

Flask - flask-pika 操作 Rabbit

目录 一、flask-pika 二、基于 Flask 框架的初步使用 2-1 生产者的队列堵塞问题 一、flask-pika 官方 github 安装 二、基于 Flask 框架的初步使用 生产者包装成API调用,消费者使用其他进程监听执行 '''配置文件 dev.py''' FLASK_PIKA_PARAMS = { 'host': 'localhos...

LIN的博客 4147

aio-pika的使用

隐藏页面特效 生产者 创建连接 生成channel 声明队列 无回调函数 import asyncio import aio_pika async def main(): connection = await aio_pika.connect_robust( “amqp://guest:guest@127.0.0.1/” ) # 建立连接 queue_name = "test_queue" async with connection: # 上下文管理,退出时自动关闭connection ch

fei321321的博客 2073

Pika 消息确认机制:为什么多线程环境需要特殊处理

Pika 是一个纯 Python 实现的 RabbitMQ/AMQP 0-9-1 客户端库,提供了可靠的消息传递功能。在分布式系统中,消息确认机制是确保消息可靠传递的核心保障,而在多线程环境下,这一机制需要特别处理以避免数据竞争和状态不一致问题。 ## 什么是消息确认机制? 消息确认机制是 RabbitMQ 确保消息可靠传递的重要机制。当生产者发送消息后,RabbitMQ 会通过 Basic.

gitblog_02573的博客 704

python使用pika操作rabbitmq编程入门()

pika生产者程序大致步骤: 1. 建立连接connection , 需要认证的调用认证参数 2. 创建通道channel 当然 channel可以池化,这样可以重复使用 3. 声明队列 指定队列属性, 一旦指定属性不能修改, 例如是否持久化,名称 4. 声明交换机 交换机类型,名称等, 也可以不用声明,直接使用 “” 空字符串,默认交换机也可以 5. 将队列与交换机绑定 queue_...

comprel的博客 4393

Python RabbitMQ pika的安装及单生产单消费模型的使用

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件 ,RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。本文主要介绍Python中使用pika模块来实现与RabbitMQ通讯,以及相关的示例代码。

weixin_52026996的博客 1282

RabbitMQ 核心术语 + Python pika 方法完整讲解

本文通俗讲解RabbitMQ核心概念和Python pika库使用方法。主要内容包括:1)基础术语:Connection/TCP连接、Channel/逻辑通道、Exchange/交换机类型、Queue/队列等;2)Python pika常用API:创建连接凭证、声明队列、发送/接收消息、ACK确认等代码示例;3)关键流程:生产者发送消息到交换机→队列→消费者处理并确认的完整过程;4)易混淆概念对比。文章结合代码示例,帮助开发者快速掌握RabbitMQ的核心概念和Python操作要点。

cfvbcgbcfh的博客 312

python采用pika库使用rabbitmq(二)

Pika是用于Python的RabbitMQ(AMQP-0-9-1)客户端库,官方文档地址:https://pypi.org/project/pika/ 工作模式:其中P表示produce,生产者的意思,也可以称为发送者,实例中表现为send.py;C表示consumer,消费者的意思,也可以称为接收者,实例中表现为receive.py;中间红色的表示队列的意思,实例中表现为hello队列。...

weixin_30363817的博客 214

python远程桌面监控系统_rebbitmq之python_pika监控远程连接及自动恢复(七)

前言客户端连接rabbitmq后,如果长时间没有数据的传输,rabbitmq会申请关闭TCP连接,造成该TCP连接下的所有的信道都不可用,很多时候为了传输数据的高效率,我们会先创建一个信道池,这样省去了每次数据传输连接和释放连接的时间,但由于rabbitmq可能会远程关闭连接,因此需要判断连接池中的通道是否还有效;判断TCP连接和channelimport pika# 首先创建一个TCP连接# 添...

weixin_39517400的博客 278

rebbitmq之python_pika监控远程连接及自动恢复(七)

前言 客户端连接rabbitmq后,如果长时间没有数据的传输,rabbitmq会申请关闭TCP连接,造成该TCP连接下的所有的信道都不可用,很多时候为了传输数据的高效率,我们会先创建一个信道池,这样省去了每次数据传输连接和释放连接的时间,但由于rabbitmq可能会远程关闭连接,因此需要判断连接池中的通道是否还有效; 判断TCP连接和channel import pika # 首先创建一个TCP连...

weixin_30906701的博客 395

RabbitMq使用中常见错误小结

最近使用RabbitMq作为消息中间件,使用中遇到了一些问题,这里作一小结,供新手参考。 pika.exceptions.ProbableAuthenticationError: ConnectionClosedByBroker: (403) ‘ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. Fo...

guotianqing的博客 2万+

python使用rabbitmq接收_python – 如何使用Pika发送和接收RabbitMQ消息?

事实证明,我对AMQP的理解是不完整的.这个想法如下:客户:获得连接后的客户端不应该关心除交换机名称和路由密钥之外的任何其他内容.那就是我们不知道最终会进入哪个队列.channel.basic_publish(exchange='order',routing_key="order.test.customer",body=pickle.dumps(data),properties=pika.Basi...

weixin_39758618的博客 313
上一篇: pika详解(三)SelectConnection及其他Connection
下一篇: pika详解(五)登录认证及connectionParameters
comprel
博客等级 码龄10年 70粉丝 132原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值