安装RabbitMQ(MAC平台)
- 安装 brew install rabbitmq
- 启动 /usr/local/sbin rabbitmq-server
- 访问: http://localhost:15672 使用guest/guest 登陆
基本概念
RabbitMQ发送消息时,都是先把消息发送给ExChange(交换机),然后再分发给有相应RoutingKey关系的Queue。ExChange和Queue是多对多的关系。RabbitMQ 3.0之后创建ExChange时,有四种类型可选”fanout、direct、topic、headers”。
- fanout(route key不生效)
所有发送到Fanout Exchange的消息都会被转发到与该Exchange 绑定(Binding)的所有Queue上。Fanout Exchange 不需要处理RouteKey 。只需要简单的将队列绑定exchange 上。这样发送到exchange的消息都会被转发到与该交换机绑定的所有队列上。类似子网广播,每台子网内的主机都获得了一份复制的消息。所以,Fanout Exchange 转发消息是最快的。 - direcrt
所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue。 - topic
所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上,Exchange 将RouteKey 和某Topic 进行模糊匹配。此时队列需要绑定一个Topic。可以使用通配符进行模糊匹配,符号“#”匹配一个或多个词,符号“”匹配不多不少一个词。因此“log.#”能够匹配到“log.info.oa”,但是“log.” 只会匹配到“log.error”。 - headers
python操作
python可选择pika或者kombu
基本使用
此模式下,发送队列的一方把消息存入mq的指定队列后,若有消费者端联入相应队列,即会获取到消息,并且队列中的消息会被消费掉。
- publish.py
from __future__ import absolute_import
import pika
credentials = pika.PlainCredentials('guest','guest')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'127.0.0.1', 5672, '/', credentials))
channel = connection.channel()
# declare queue
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body=