本文共 2740 字,大约阅读时间需要 9 分钟。
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然. AMQP的主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全. RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python,Ruby,.NET,Java,JMS,C,PHP,ActionScript,XMPP,STOMP等,支持AJAX.用于在分布式系统中存储转发消息,在易用性,扩展性,高可用性等方面表现不俗.
1.可靠性:Exchange交换机,Queue队列,Message消息持久化,高可用性;
2.灵活路由;
3.集群:分为Disc(硬盘)与RAM(内存),保证至少一台Disc;
防止单机丢失,RabbitMQ支持集群,多台机器队列同步,丢失消息可从其他机器上获取 4.高可用队列:与集群结合使用,设置队列间的消息同步;
5.持久化存储:RabbitMQ支持持久化,数据保存在硬盘上;
防止突然掉电措施 6.支持流控机制:可修改内存大小,默认为机器内存的40%;
防止队列消息爆满
一,应用程序之间无需即时返回且消耗操作(异步处理):
1.Work Queues:消费均匀分配消息给消费者;
2.Publish/Subscribe:广播模式,消息分发给所有的消费者;
3.Routing:消费者接收消息由路由规则决定,简单路由名;
4.Topisc:消费者接收消息由路由规则决定,路由规则名比较复杂;
二,RPC远程调用(同步):
Broker:消息队列服务器实体,比如RabbitMQ服务;
Vhost:虚拟主机,默认为’/’,一个broker里可以有多个vhost,区分不同用户权限;
Connection:应用程序与broker连接,可有多个连接;
Channel:消息通道,connection中可以建立多个channel,每个channel代表一个会话任务,所有操作都在channel中进行;
Exchange:消息交换机,channel中可有多个,用于投递消息.应用程序发送消息时先把消息给交换机,由交换机投递给队列,而不是直接给队列;
Queue:队列,用于存放未被消费者消费的消息;
Message:由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化,由哪个Message Queue接收、优先级是多少等.而Body才真正需要传输APP数据;
Bind:根据routingKey绑定exchange与queue规则,决定消息发送的方向;
Exclusive:排他队列,如果一个队列被声明为排他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除;
Auto-delete:自动删除,如果该队列没有任何订阅的消息者的话,该队列会被自动删除.这种队列适用于临时队列;
Durable:持久化,下面会单独说;
其他选项:比如如果仅仅想查询某一个队列是否已经存在,仍然可以调用queue.declare,只不过需要将参数passive设为true,传给queue.declare,如果该队列已存在,返回true;如果不存在,则返回Error,但是不会创建新的队列.
在RabbitMQ 消息队列服务中生产者不直接将消息投递给队列,而是将消息投递给Exchange,然后Exchange根据相应的路由规则投递给队列,最后队列将消息投递到消费者.
VirtualHost 创建后,会自动创建多个消息交换机,并设置一个为默认交换机.
Exchange 可以简化理解为路由器,其不存储数据,其通常会和一个或多个队列绑定,但也可以绑定到另一个交换器上.
交换器有四种类型:Direct Exchange (直接模式)、Topic Exchange (匹配/订阅模式)、Fanout Exchange (广播模式)、Headers exchange (报头模式).
在 RabbitMQ 服务中Exchange 对象有一下基本属性.
Name:交换机名称. Type:交换机类型direct、topic、fanout、headers. Durability:是否需要持久化,true为持久化. Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange. Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false. Arguments:扩展参数,用于扩展AMQP协议自制定化使用.
)
工作原理:Direct Exchange 和 Queue 通过绑定键绑定;此后 Direct Exchange 接受到的消息,都会根据消息中的路由键和Exchange中绑定键进行匹配,从而确定将消息转发到对应的队列Queue 中. 特点:设置路由键,Point to point 模式发送消息,发送速度较快; 补充:可以使用RabbitMQ自带的default Exchange,无需binding操作.
工作原理:与Direct Exchange基本相同,唯一区别在于路由键.Topic exchange 的路由键可以去进行模糊匹配. 匹配规则:
表示单个模糊匹配.例如,路由键是*.apple.big 则表示第一个单词可以是任意的,只需后边单词完全匹配即可.
#表示单个或多个模糊匹配.例如,路由键是 #.little ,那么发送消息的路由键可以是 green.apple.little,也就是说前面的单词是任意的.
特点:路由键匹配,发送消息速度较快.
工作原理:Fanout Exchange 比较特殊,会忽略路由键的设置,只需要将队列绑定到交换机;会将每个 Message 广播到所有绑定的 Queue 中.
该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配.headers类型交换器性能差,在实际中并不常用.
转载地址:http://fyazi.baihongyu.com/