RabbitMQ(四) -- Routing

RabbitMQ(四) -- Routing

`rabbitmq`可以通过路由选择订阅者来发布消息。

Bindings

通过下面的函数绑定Exchange与消息队列:

channel.queue_bind(exchange=exchange_name, queue=queue_name)

可以通过添加`routing_key`来做路由选择,如下:

channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key='black')

Direct Exchange

为了使用直接转发,可以设置`Exchange`的类型为`direct`。
在`rabbitmq`中直接转发的算法很简单,如果`binding key`与`routing key`相同,消息会直接添加到相应的消息队列中取。

Multiple bindings

`rabbitmq`允许一个`Exchange`绑定多个消息队列,那么该`Exchange`会把消息分别发布到绑定的多个消息队列中。

例子

生产者:

复制代码
#!/usr/bin/env python
# coding=utf-8

import pika
import sys
import time

connection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()

channel.exchange_declare(exchange='news', type='fanout')
for i in range(100):
    message = str(i) + 'Hello World!'
    if i%2 == 0:
        channel.basic_publish(exchange='news', routing_key='0', body=message)
    else:
        channel.basic_publish(exchange='news', routing_key='1', body=message)
    print " [x] Sent %r" % (message,)
    time.sleep(2)
connection.close()
复制代码

消费者:

复制代码
import pika
import sys

parameters = pika.URLParameters('amqp://mtest:root@rabbit-server:5672/%2F')
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

channel.exchange_declare(exchange='news', type='fanout')

result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

channel.queue_bind(exchange='news', queue=queue_name, routing_key=sys.argv[1])

print ' [*] Waiting for news. To exit press CTRL+C'

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

channel.basic_consume(callback, queue=queue_name, no_ack=True)

channel.start_consuming()
复制代码

 

posted @   cococo点点  阅读(1103)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
历史上的今天:
2013-03-16 枚举
2013-03-16 phpmyadmin出现缺少mysqli扩展问题
点击右上角即可分享
微信分享提示