【问题标题】:How to access information from callback如何从回调中访问信息
【发布时间】:2019-08-30 11:34:50
【问题描述】:

我只想知道如何从回调中获取数据。

import pika


def callback(channel, method, properties, body):
    print(method.get_body())
    print(method.get_properties())
    channel.basic_ack(delivery_tag=method.delivery_tag)

def on_open(connection):
    connection.channel(on_open_callback=on_channel_open)


def on_channel_open(channel):
    channel.basic_consume(on_message_callback = callback, queue='q1')
    channel.basic_consume(on_message_callback = callback, queue='q2')


credentials = pika.PlainCredentials('user', 'password', erase_on_connect=False)
params = pika.ConnectionParameters("localhost", 5672, '/', credentials)

connection = pika.SelectConnection(parameters=params,
                                   on_open_callback=on_open)

try:
    connection.ioloop.start()
except KeyboardInterrupt:
    connection.close()

    connection.ioloop.start()

回调中两个打印行的输出是:

<class 'pika.spec.Basic.Deliver'>
<Basic.Deliver(['consumer_tag=ctag1.2607da3f5f9f4e5592991a16cc0aca6e', 'delivery_tag=1', 'exchange=gatekeeper', 'redelivered=True', 'routing_key=laa'])>

如何提取“routing_key”?查看源代码让我相信method.get_properties() 会起作用,但它没有。

【问题讨论】:

  • method.routing_key 应该是您获取路由密钥的方式。
  • 回复作为答案,所以我可以接受这个,传奇的东西兄弟。 (Y)

标签: python rabbitmq pika


【解决方案1】:

虽然记录不充分,callback 函数将使用 4 个参数调用:

Deliver 实例将有一个名为routing_key 的属性。所以你的函数可能看起来像这样:

def callback(channel, method, properties, body):
    print(method.get_body())
    print(method.get_properties())
    print(method.routing_key)
    channel.basic_ack(delivery_tag=method.delivery_tag)

PS。将调用回调的参数与here 中描述的相同,它们实际记录在案。

【讨论】:

  • “虽然文档记录不佳......”如果this documentation 不够,我会很高兴收到拉取请求来改进它,谢谢。 github.com/pika/pika
  • 我很抱歉。我似乎错过了那一点。我当时在看哪里?我还是会有点烦躁...也许我会弄清楚如何在 html 中很好地格式化它(例如,不在单行上like it is now
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多