在RabbitPy中将消息发布到队列

时间:2016-11-09 11:14:14

标签: python rabbitmq rabbitpy

我期待RabbitPy消费和发布消息。消费部分很好,但我想在对入站消息做一些事情之后将消息发送回特定队列。但是我无法在文档中找到这样做。

https://rabbitpy.readthedocs.io/en/latest/api/message.html

这是我的消费代码:

with rabbitpy.Connection('amqp://guest:guest@localhost:5672/%2f') as conn:
        with conn.channel() as channel:
            queue_read = rabbitpy.Queue(channel, QUEUE_NAME)
            queue_write = rabbitpy.Queue(channel, QUEUE_NAME_RESPONSE)
            # Exit on CTRL-C
            try:
                # Consume the message
                for body in queue_read:
                   # do something on inboud...

以下是我只能在创建和发送消息时设置的内容:

message = rabbitpy.Message(channel, result)
message.publish(EXCHANGE, RESPONSE_ROUTING_KEY, mandatory=False)

没有任何与队列相关的内容。如何使用路由密钥将消息发送到特定队列?

在Pika我会使用以下内容:

channel = cnn.channel()
channel.exchange_declare(exchange=EXCHANGE, durable='True')
channel.exchange_declare(exchange=EXCHANGE, type='direct', durable='True')
channel.queue_declare(queue=QUEUE_NAME_RESPONSE, durable='True')
channel.queue_bind(exchange=EXCHANGE, queue=QUEUE_NAME_RESPONSE)
channel.basic_publish(exchange=EXCHANGE, routing_key=RESPONSE_ROUTING_KEY, body=return_JSON,properties=pika.BasicProperties(content_type='text/plain', delivery_mode=2))
channel.close()

我怎么能用RabbitPy做到这一点?

2 个答案:

答案 0 :(得分:0)

使用EXCHANGE, RESPONSE_ROUTING_KEY队列绑定。

enter image description here

例如

我们有2个队列,Queue1和Queue2。 1交换为Exchange和routingky为 routingkey1和routingkey2。

Exchange  + routingkey1  ==> Queue1 
Exchange  + routingkey1  ==> Queue2

假设具有上述约束力。

当您的发布商使用Exchange + routingkey1发送消息时,它将发送到队列1.如果发布者使用routingkey1消息将发送到Queue2。

您可以使用Rabbitmq管理UI创建必要的绑定或构建代码。可以找到更多详细信息here

在Rabbitpy你可以做这样的事情,

amqp = rabbitpy.AMQP(channel)
amqp.queue_bind(queue='Queuq1', exchange='Exchange', routing_key='RoutingKey1')

答案 1 :(得分:0)

我可能通过将路由密钥绑定到交换机和队列来实现此目的。我有以下内容:

queue_write.bind(EXCHANGE, routing_key=RESPONSE_ROUTING_KEY, arguments=None)