当前位置: 首页 > 知识库问答 >
问题:

如何使用python在rabbitmq中的标头挖掘方法中传递标头

太叔景同
2023-03-14

#!/usr/bin/env python import pika,sys,os def main(): connection = pika。BlockingConnection(pika。connection parameters(host = ' localhost '))channel = connection . channel()

channel.exchange_declare(exchange='headers_logs', exchange_type='headers')

channel.queue_declare(queue='', exclusive=True)
queue_name = "HeadersQueue1"

channel.queue_bind(exchange='headers_logs', queue=queue_name)

def callback(ch, method, properties, body):
    print(" [x] %r" % body.decode())

print(' [*] Waiting for logs. To exit press CTRL+C')
channel.basic_consume(
    queue=queue_name, on_message_callback=callback, auto_ack=True)

channel.start_consuming()

if name=='main':try:main()除了键盘中断:打印('中断')try:sys。退出(0),SystemExit:os._exit(0)除外

#!/usr/bin/env python import pika import sys connection = pika.阻塞连接(pika.ConnectionParameters(host='localhost')) channel = connection.channel()

channel . exchange _ declare(exchange = ' headers _ logs ',exchange_type='headers ')

消息=“”。加入(sys.argv[1:])或“你好!”

频道basic_publish(exchange='headers_logs',headers={“name”:“ram”},body=message)print(“[x]发送%r”%message”)connection.close()

在这里我写了像上面这样的消费者和发布程序。有人能指导一下如何使用python在RabbitMq中编写简单的头交换程序吗

共有1个答案

慕容灿
2023-03-14

要使用标头交换,您需要将交换类型声明为标头,而不是问题文本中的扇出。

exchangeName = 'headers_logs'
channel.exchange_declare(exchangeName, exchange_type='headers', durable=True)

然后创建队列并使用标头将其绑定到交换。请注意,这里的“x-匹配”可以设置为匹配任何或所有标头。路由键设置为空字符串,因为它不会用于路由消息。

qName = 'queue_logs'
channel.queue_declare(queue=qNameI, durable=True)
channel.queue_bind(qName, exchangeName, routing_key='',  arguments={'x-match': 'any', 'key1': 'one', 'key2': 'two'})

现在我们可以使用一组标头向交易所发布消息:

channel.basic_publish(
    exchange=exchangeName, 
    routing_key='', 
    body='test message body',
    properties=pika.BasicProperties(
        delivery_mode = 2, # make message persistent
        headers = {'key1':'one', 'key2': 'three'}
    )
)

我只匹配了此消息中的“key1”,以证明“x-match”已设置为“任何”。

 类似资料:
  • 我是一个新手,试图在java客户端中实现标头交换。我知道这就是“x匹配”绑定参数的用途。当“x匹配”参数设置为“任何”时,只需一个匹配的标头值就足够了。或者,将“x匹配”设置为“所有”要求所有值必须匹配。但是任何人都可以为我提供一个框架代码以更好地理解。

  • 我是新的放心,我试图做一个非常基本的测试来检查响应体和状态。我在这个API调用中按要求传递头部,但当我运行测试时,我得到了401个未经授权的消息,而不是在响应体中显示结果。当我使用Postman运行相同的API时,它的工作很好 下面是我得到的控制台消息,其中显示401 响应发送=>io.restassured.internal.restassuredresponseImpl@18cebaa5响应正

  • 我有以下代码,用于创建和客户端并发送请求并等待响应。在这里你可以看到,我也用设置了一些标头值 现在,我需要我的要求是,我不需要消费者端的任何响应,只想将请求传递给带有一些标头值的消费者。为此,我只需发布命令并忘记它。我的代码如下, 但现在,我关心的是,我如何用它传递头值?

  • 我正在使用spring webflux和Security。我有3个服务A、B、C和服务C中的两个endpoint,如下所示 健康安全 状态-不应保护 null 如何避免这一点?因为status调用将来自服务A,所以服务A到服务B需要不同的auth,服务B被传递到服务C,因为它失败了,但是对于服务B到服务C,endpoint不需要任何auth。 我知道我们可以创建一个没有auth头的新请求,但我想知

  • 问题内容: 我正在尝试使用jQuery在AJAX GET中传递请求标头。在下面的块中,“数据”自动传递查询字符串中的值。有没有办法在请求标头中传递该数据? 以下内容也不起作用 问题答案: 用途: http://api.jquery.com/jQuery.ajax/ http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader- method

  • 我与React、Express、MongoDB的应用程序。 我想为Axios post请求传递带有标头的身份验证令牌。 但是,当我试图通过它,得到403错误(禁止)。 本地存储 我正在从本地存储中检索所有身份验证数据 Axios。邮递 我在这里调用axios post请求 API头和响应 这是我从浏览器中得到的响应 我的邮递员电话打得很好