设为首页 收藏本站
查看: 808|回复: 0

[经验分享] RabbitMQ 基础概念

[复制链接]

尚未签到

发表于 2017-7-4 21:50:02 | 显示全部楼层 |阅读模式
  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, 1, null);
  参数1:prefetch_size
  参数2:prefetch_count
  参数3:a_global
  (未完待续....)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390795-1-1.html 上篇帖子: python成长之路【第十二篇】:RabbitMQ入门 下篇帖子: javascript之常用排序算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表