RabbitMQ(一)基础介绍

消息队列

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。
消息队列有两种消息模型P2P(Point to Point),Publish/Subscribe(Pub/Sub)。
详细请看 http://blog.csdn.net/shaobingj126/article/details/50585035

RabbitMQ简介

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

RabbitMQ概念

RabbitMQ(一)基础介绍

Broker:简单来说就是消息队列服务器实体。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。

Exchange类型:交换机有四种类型 DIRECT, TOPIC, HEADERS, FANOUT
DEFAULT:
默认,向指定的队列发送消息,消息只会被一个consumer处理,多个消费者消息会轮训处理,消息发送时如果没有consumer,消息不会丢失
DIRECT:
向所有绑定了相应routing key的队列发送消息
如果producer在发布消息时没有consumer在监听,消息将被丢弃
如果有多个consumer监听了相同的routing key 则他们都会受到消息
TOPIC:
与direct模式有类似之处,都使用routing key作为路由,不同之处在于direct模式只能指定固定的字符串,而topic可以指定一个字符串模式(匹配)
HEADERS:
与topic和direct有一定相似之处,但不是通过routing key来路由消息,通过headers中词的匹配来进行路由
FANOUT:
广播给所有队列 接收方也必须通过fanout交换机获取消息,所有连接到该交换机consumer均可获取消息
如果producer在发布消息时没有consumer在监听,消息将被丢弃
消息队列的使用过程,如下:
(1)客户端连接到消息队列服务器,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。