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

(未完待续....)

最新文章

  1. 2012-2013 ACM-ICPC Northeastern European Regional Contest (NEERC 12)
  2. javascript 的基础笔记
  3. [HDU 4787] GRE Words Revenge (AC自动机)
  4. 模板:函数memset
  5. 再硬写一个最简单的HTTPSERVER
  6. Qt自定义sleep延时函数(巧妙的使用时间差,但这样似乎CPU满格,而不是沉睡)
  7. LightOJ - 1422 Halloween Costumes (区间dp)
  8. struts2框架的登录制作
  9. C#又能出来装个B了。一步一步微信跳一跳自动外挂
  10. ASP.NET 设计模式:设计模式和原则简述
  11. 美国不同C段服务器,多ip服务器
  12. Django中ORM介绍和字段及其参数
  13. 使用cURL尝试ElasticSearch
  14. 基于Android P系统对selinux相关整理
  15. node-服务器
  16. imageLoader之介绍
  17. Docker 简介与shell操作使用
  18. pip 安装错误 'ascii' codec can't encode characters
  19. MongoDB ShardingCluster
  20. 如何查找元素对应事件的js代码

热门文章

  1. APP开发:对于IOS APP应用的推广渠道有哪些?
  2. SQL Server 参数化 PARAMETERIZATION
  3. python学习笔记系列----(五)输入和输出
  4. 在ie与火狐的兼容性
  5. 分享前端Facebook及Twitter第三方登录
  6. 在SQL Server 2005中连接Oracle,完成查询、插入操作
  7. java图书管理的一个小模块(增删改查,不使用数据库)
  8. android实现第三方登录之QQ登录
  9. 设置button键隐藏文字text
  10. TOJ 2776 CD Making