RabbitMQ 基础概念
Broker:消息协商器。消息队列的实体,它在TCP/IP等端口上监听AMQ消息
vHost:虚拟主机。功能上类似于web的虚拟主机,都是把数据按照功能或项目的不同划分为不同的虚拟主机;用户只被授予访问虚拟主机的权限,而没有其他比这高级的访问控制措施。客户端与Broker沟通需要先建立连接,这些连接仅限于连接用户和虚拟主机。
channel:通道。客户端在连接中声明一个通道,这个通道是客户与Broker之间的一个逻辑连接;客户端的操作都是通过通道来实现的。具体的操作需要客户端声明相应的组件。
常用的组件:
- 交换器(Exchange),它是发送消息的实体;可以显式命名
- 队列(Queue),这是接收消息的实体;可以显式命名;如果不命名,系统会自动生成一个队列,名称也为随机的,随机生成的队列生命周期会在当次生成它的连接断开时结束
- 绑定器(Bind),将交换器和队列连接起来,并且封装消息的路由信息;绑定的交换器
message:消息
消息的组成:
- 元数据,例如内容的编码或者表明来源的字段。
- 标志位,标记消息投递时候的一些保障机制。
- 一个特殊的字段叫做routing key。
exchange:交换器
交换器负责把producer的消息按指定的规则分配给queue
规则有四种:
- direct
- topic
- headers
- fanout 群发,向所有绑定的queue
queue:队列
broker储存消息的位置,他可以由producer和consumer任意一方建立。
temporary queue:临时队列
声明队列时如果不指明队列名称,那么声明的队列将是一个自动命名的队列,这个队列会在连接断开时自动删除,因为它属于一次会话的专属队列,会话结束,它也就应该结束了。
消息从发送到接收的流程:
消息发送客户端-create channel-》exchange-》queue-》-create channel -消息接收客户端 (接收端的接收流程还不确定)
broker在发送消息成功后会立即删除掉保存在queue中的该条消息。如果设置了回执,broker会在收到回执后执行删除。
consumer关闭、broker服务关闭都会造成任务失败和消息丢失。
- consumer异常: message acknowledgment。如果consumer发生异常消息未收到的情况下,broker不会删除掉该消息,而是重新发送,直到收到consumer返回回执才会删除。
- broker异常: 对队列和消息进行持久化。
- 队列持久化:在队列声明中将持久化的参数设置为true即可使队列持久化;这个设置必须在producer和consumer同时设置;另外,已声明并存在队列的属性是不能修改,因此需要重新声明一个新的队列
$channel->queue_declare('task_queue', false, true, false, false);
- 消息持久化: 依据原始消息数据,在实例化消息对象时,传入消息持久化的参数
$msg = new AMQPMessage($data,
array('delivery_mode' => 2) # make message persistent
);
默认的这种持久化并不是非常的强壮,因为在broker接受消息后有一小段时间内消息是未保存的。另外,rabbitmq不会对每条消息执行fsync,因此消息有可能是在内存的缓存中,并未真正的写到磁盘上。如果需要更妥当的持久化,需要用到事务Transaction 具体详情:https://www.rabbitmq.com/confirms.html
round-robin dispatching:消息轮询分发
如果有多个worker,borker会将消息按照奇偶数轮流分发给worker;
Qos:服务质量
消息有的长,有短,如果一个worker分发到的消息都很长,而一个worker分发到的都比较短,那么一个worker会很繁忙,另一个会很闲。这样就需要去平衡消息的分发。
basic_qos(null, , null);
参数1:prefetch_size
参数2:prefetch_count
参数3:a_global
(未完待续....)
RabbitMQ 基础概念的更多相关文章
- RabbitMQ基础概念详细介绍
http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...
- RabbitMQ基础概念及使用
RabbitMQ RabbitMQ是什么? RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Message Q ...
- RabbitMQ 基础概念进阶
上一篇 RabbitMQ 入门之基础概念 介绍了 RabbitMQ 的一些基础概念,本文再来介绍其中的一些细节和其它的进阶的概念. 一.消息生产者发送的消息不可达时如何处理 RabbitMQ 提供了消 ...
- RabbitMQ基础概念
转至:http://blog.csdn.net/whycold/article/details/41119807 RabbitMQ简介 AMQP,即Advanced Message Queuing P ...
- RabbitMQ 基础概念介绍
AMQP 消息模型 RabbitMQ 是基于 AMQP(高级消息队列协议)的一个开源实现,其内部实际也是 AMQP 的基本概念.
- RabbitMQ基础概念(消息、队列、交换机)
1.消息的确认 RabbitMQ需要对每一条发送的消息进行确认.消费者必须通过AMQP的basic.ack命令显式地向RabbitMQ发送一个确认,或者在订阅到队列的时候就将auto_ack参数设置为 ...
- RabbitMQ基本概念和原理
RabbitMQ基本概念和原理 1.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. 2.Rabb ...
- RabbitMq基础教程之基本概念
RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...
- RabbitMQ学习总结(1)——基础概念详细介绍
一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松 ...
随机推荐
- 如何启动redis
直接运行redis-server既可以启动redis
- 搭建Python+Django开发环境
第一步:安装python. 常见的windows系统,直接python网站下载 最新的版本python3.5. python安装好之后,配置好环境变量.使得python和 pip命令能够正常使用. 第 ...
- HTML之Hello World
之前学过一段时间的HTML相关知识,但是已经有将近一年多时间没有用过了,曾经学过的知识基本都忘记了,所以要从头开始学习. 例子:Hello World <!DOCTYPE html> &l ...
- memcpy内存复制
memcpy(predata,frame,1920*1080*4);
- HTML5元素、属性和格式化
- git push :推送本地更改到远程仓库的三种模式
摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆 ...
- windows registry => control pannel
User Variables HKEY_CURRENT_USER\Environment System Variables HKEY_LOCAL_MACHINE\SYSTEM\CurrentContr ...
- jquery checkbox 实现单选
最近在用javascript的时候发现网上实现checkbox单选的代码都已经过时了. 用着几年前的代码发现根本不行了 原因是jquery api已经更改 http://api.jquery.com/ ...
- angularJS——自定义服务provider之$get
可以认为provider有三个部分: 第一部分是私有变量和私有函数,这些变量和函数会在以后被修改. 第二部分是在app.config函数里可以访问的变量和函数,所以,他们可以在其他地方使用之前被修改. ...
- mysql 主从复制实现步骤
fuhi