- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
rabbitMQ入门详解,大神勿喷。。。自己总结的rabbitMQ说明文档
rabbitMQ是什么
RabbitMQ
是由
LShift
提供的一个
Advanced Message Queuing Protocol (AMQP
的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang
写成(因此也是继承了这些优点。
首先介绍
AMQP
和一些基本概念:
当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本。
AMQP
是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端
/
中间件不同产品,不同开发语言等条件的限制。
当然这种降低耦合的机制是基于与上层产品,语言无关的协议。
AMQP
协议是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。从整体来看,
AMQP
协议可划分为三层。
这种分层架构类似于
OSI
网络协议,可替换各层实现而不影响与其它层的交互。
AMQP
定义了合适的服务器端域模型,用于规范服务器的行为(AMQP
服务器端可称为
broker
。
Model
层决定这些基本域模型所产生的行为,这种行为在AMQP
中用
”command”
表示,在后文中会着重来分析这些域模型。
Session
层定义客户端与
broker
之间的通信
(
通信双方都是一个
peer
,可互称做
partner
,为
command
的可靠传输提供保障。
Transport
层专注于数据传送,并与
Session
保持交互,接受上层的数据,组装成二进制流,传送到receiver
后再解析数据,交付给
Session
层。
Session
层需要
Transport
层完成网络异常情况的汇报,顺序传送
command
等工作。
AMQP
当中有四个概念非常重要:虚拟主机(
virtual host
,交换机(
exchange
,队列(
queue
和绑定(
binding
。
虚拟主机(
virtual host
:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?
RabbitMQ
当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止
A
组访问
B
组的交换机
/
队列
/
绑定,必须为
A
和
B
分别创建一个虚拟主机。每一个
RabbitMQ
服务器都有一个默认的虚拟主机
“/”
。
队列(
Queue
:由消费者建立的,是
messages
的终点,可以理解成装消息的容器。消息一直存在队列里,
直到有客户端或者称为
Consumer
消费者连接到这个队列并将
message
取走为止。队列可以有多个。
交换机(
Exchange
:可以理解成具有路由表的路由程序。每个消息都有一个路由键(
routing key
,就是一个简单的字符串。交换机中有一系列的绑定( binding
,即路由规则(
routes
。交换机可以有多个。多个队列可以和同一个交换机绑定,同时多个交换机也可以和同一个队列绑定。(多对多的关系
三种交换机:
1.
Fanout Exchange
(不处理路由键:一个发送到交换机上的消息都会被转发到与该交换机绑定的所有队列上。
Fanout
交换机发消息是最快的。
2.
Direct Exchange
(处理路由键:如果一个队列绑定到该交换机上,并且当前要求路由键为
X
,只有路由键是
X
的消息才会被这个队列转发。
3.
Topic Exchange
(将路由键和某模式进行匹配,可以理解成模糊处理:路由键的词由
“.”
隔开,符号
“#”
表示匹配
个或多个词,符号
“*”
表示匹配不多不少一个词。因此
“
audit.#
”
能够匹配到
“
audit.irs.corporate
,但是
“
audit.*
”
只会匹配到
“
audit.irs
”
具体例子可以看下图
持久化:队列和交换机有一个创建时候指定的标志durable,直译叫做坚固的。durable的唯一含义就是具有这个标志的队列和交换机会在重启之后重新建立,它不表示说在队列当中的消息会在重启后恢复。那么如何才能做到不只是队列和
交换机,还有消息都是持久的呢?
但是首先一个问题是,你真的需要消息是持久的吗?对于一个需要在重启之后回复的消息来说,它需要被写入到磁盘上,而即使是最简单的磁盘操作也是要消耗时间的。如果和消息的内容相比,你更看重的是消息处理的速度,那么不要使用持久化的消息。
当你将消息发布到交换机的时候,可以指定一个标志“Delivery Mode”(投递模式。根据你使用的AMQP的库不同,指定这个标志的方法可能不太一样。简单的说,就是将Delivery Mode
文档评论(0)