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:[email protected]: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()
时间: 2024-10-14 06:28:12

RabbitMQ(四) -- Routing的相关文章

RabbitMQ(四):RPC的实现

原文:RabbitMQ(四):RPC的实现 一.RPC RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.有很多方式可以实现,譬如UNIX RPC.REST API.WCF和SOAP.这些传统的RPC实现方法有共同之处:那就是客户端和服务器端紧密相连,客户端直接连接上服务器,发送一个请求,然后就停下来等待服务器的应答. 这种点对点的性质模式有很多好处,它使得在小范围内的拓扑变得简单.但是当有众多服务器的

RabbitMQ官方教程四 Routing(GOLANG语言实现)

在上一教程中,我们构建了一个简单的日志记录系统. 我们能够向许多消费者广播日志消息. 在本教程中,我们将向其中添加功能-我们将使仅订阅消息的子集成为可能. 例如,我们将只能将严重错误消息定向到日志文件(以节省磁盘空间),同时仍然能够在控制台上打印所有日志消息. 绑定 在前面的示例中,我们已经在创建绑定. 您可能会想起类似的代码: err = ch.QueueBind( q.Name, // queue name "", // routing key "logs",

【RabbitMQ】 Routing

Routing 之前的章节里我们构建了一个简单的日志系统.我们可以广播所有的日志消息给所有的接收端. 本节我们将给它添加一个新特性 - 我们将允许只订阅一个消息的子集.例如,我们只将关键的错误消息定位到文件中(以节省磁盘空间),同时仍然可以在控制台输出所有日志消息. Bindings 在前面的例子中我们已经创建了绑定关系.回想代码如下: channel.queueBind(queueName, EXCHANGE_NAME, ""); 一个绑定是指一个交换机和一个队列之间的关系.可以简单

RabbitMQ erlang "Routing"

官方网址:http://www.rabbitmq.com/tutorials/tutorial-four-python.html 前面的例子中,我们构建了一个简单的日志系统.我们可以广播日志消息给所有的接收者. 在这个例子中,我们准备增加一个新特性.我们将能仅仅订阅消息的一部分. 例如:我们直接仅仅把 critical error 类型的消息写入日志文件(保存到磁盘空间),然而还能够打印所有的日志消息到控制台. Bindings(绑定) 在前面的例子中,我们已经创建bindings. 如下: a

RabbitMQ 路由选择 (Routing)

让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在前面中我们已经使用过绑定.类似下面的代码: 1 channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示转发器与队列之间的关系.我们也可以简单的认为:队列对该转发器上的消息感兴趣. 绑定可以附带一个额外的参数routingKey.为了与避免basicPublish方法(发布消息的

RabbitMQ之Routing(路由有选择的接收)

创建绑定方式 1 channel.queue_bind(exchange="交换器的名字", 2 queue="队列的名字") 绑定使用路由参数(主要避免basic_publish参数混淆) 1 channel.queue_bind(exchange="交换器的名字", 2 queue="队列的名字", 3 routing_key="black") 直接交换 在消息发布与订阅中,消息广播给所有在线的消费者,

(转)(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

http://blog.csdn.net/super_rd/article/details/70238869 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中可以看出RabbitMQ主要由Exchange和Queue两部分组成,然后通过RoutingKey关联起来,消息投递到Exchange然后通过Queue接收. RabbitMQ消息队列基本概

RabbitMQ基础概念详细介绍

你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题. 消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议

RabbitMQ基础

一.什么是RabbitMQ?用它能做什么? 1.简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然.AMQP的主要特征是面向消息.队列.路由(包括点对点和发布/订阅).可靠性.安全.RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Ja

RabbitMQ下的生产消费者模式与订阅发布模式

??所谓模式,就是在某种场景下,一类问题及其解决方案的总结归纳.生产消费者模式与订阅发布模式是使用消息中间件时常用的两种模式,用于功能解耦和分布式系统间的消息通信,以下面两种场景为例: 数据接入 ??假设有一个用户行为采集系统,负责从App端采集用户点击行为数据.通常会将数据上报和数据处理分离开,即App端通过REST API上报数据,后端拿到数据后放入队列中就立刻返回,而数据处理则另外使用Worker从队列中取出数据来做,如下图所示. ??这样做的好处有:第一,功能分离,上报的API接口不关心