博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ概念
阅读量:3958 次
发布时间:2019-05-24

本文共 2740 字,大约阅读时间需要 9 分钟。

RabbitMQ简介

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

Rabbit MQ优势

1.可靠性:Exchange交换机,Queue队列,Message消息持久化,高可用性;

2.灵活路由;

3.集群:分为Disc(硬盘)与RAM(内存),保证至少一台Disc;

防止单机丢失,RabbitMQ支持集群,多台机器队列同步,丢失消息可从其他机器上获取 4.高可用队列:与集群结合使用,设置队列间的消息同步;

5.持久化存储:RabbitMQ支持持久化,数据保存在硬盘上;

防止突然掉电措施 6.支持流控机制:可修改内存大小,默认为机器内存的40%;

防止队列消息爆满

Rabbit MQ 服务场景

一,应用程序之间无需即时返回且消耗操作(异步处理):

1.Work Queues:消费均匀分配消息给消费者;

2.Publish/Subscribe:广播模式,消息分发给所有的消费者;

3.Routing:消费者接收消息由路由规则决定,简单路由名;

4.Topisc:消费者接收消息由路由规则决定,路由规则名比较复杂;

二,RPC远程调用(同步):

RabbitMQ 构建消息队列

如图所示,理解RabbitMQ对象间的关系

RabbitMQ模型

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规则,决定消息发送的方向;

声明MessageQueue

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 (报头模式).

Exchange的属性

在 RabbitMQ 服务中Exchange 对象有一下基本属性.

Name:交换机名称. Type:交换机类型direct、topic、fanout、headers. Durability:是否需要持久化,true为持久化. Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange. Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false. Arguments:扩展参数,用于扩展AMQP协议自制定化使用.

Direct Exchange直接模式

rabbitmq-directexchange)

工作原理:Direct Exchange 和 Queue 通过绑定键绑定;此后 Direct Exchange 接受到的消息,都会根据消息中的路由键和Exchange中绑定键进行匹配,从而确定将消息转发到对应的队列Queue 中. 特点:设置路由键,Point to point 模式发送消息,发送速度较快; 补充:可以使用RabbitMQ自带的default Exchange,无需binding操作.

Topic Exchange 匹配/订阅模式

topicexchange

工作原理:与Direct Exchange基本相同,唯一区别在于路由键.Topic exchange 的路由键可以去进行模糊匹配. 匹配规则:

  • 表示单个模糊匹配.例如,路由键是*.apple.big 则表示第一个单词可以是任意的,只需后边单词完全匹配即可.

  • #表示单个或多个模糊匹配.例如,路由键是 #.little ,那么发送消息的路由键可以是 green.apple.little,也就是说前面的单词是任意的.

特点:路由键匹配,发送消息速度较快.

Fanout Exchange 广播模式

fanoutexchange

工作原理:Fanout Exchange 比较特殊,会忽略路由键的设置,只需要将队列绑定到交换机;会将每个 Message 广播到所有绑定的 Queue 中.

Headers Exchange 头模式

该类型的交换器不依赖路由规则来路由消息,而是根据消息内容中的headers属性进行匹配.headers类型交换器性能差,在实际中并不常用.

转载地址:http://fyazi.baihongyu.com/

你可能感兴趣的文章
杭电ACM——6467,简单数学题(思维)
查看>>
杭电ACM——天上掉馅饼(DP)
查看>>
杭电ACM——1086,You can Solve a Geometry Problem too(思维)
查看>>
杭电ACM——2057,A + B Again(思维)
查看>>
codeforces——1097B,Petr and a Combination Lock(搜索)
查看>>
杭电ACM——2064,汉诺塔III(递推)
查看>>
杭电ACM——2065,"红色病毒"问题(思维)
查看>>
北大ACM——2385,Apple Catching(DP)
查看>>
杭电AM——2072,单词数(暴力)
查看>>
杭电ACM——2073,无限的路(思维)
查看>>
杭电ACM——2069,Coin Change(DP)
查看>>
杭电ACM——2074,叠筐
查看>>
北大ACM——3616,Milking Time(DP)
查看>>
杭电ACM——2076,夹角有多大
查看>>
牛客练习赛43——B Tachibana Kanade Loves Probability(暴力,思维)
查看>>
牛客第十七届上海大学程序设计春季联赛——E CSL 的魔法(贪心)
查看>>
杭电ACM——1028,Ignatius and the Princess III(母函数)
查看>>
杭电ACM——1171,Big Event in HDU(母函数)
查看>>
杭电ACM——6491,时间间隔(思维)
查看>>
杭电AC——1085,Holding Bin-Laden Captive!(母函数)
查看>>