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

[经验分享] RabbitMQ总结概念

[复制链接]

尚未签到

发表于 2017-7-2 15:04:33 | 显示全部楼层 |阅读模式
  AMQP:一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计
  http://www.diggerplus.org/archives/3110
  AMQP中有四个概念非常重要:
    1.虚拟主机(vritual host)
    2.交换机(exchange)
    3.队列(queue)
    4.绑定(binding)
  虚拟主机( virtual host ):一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢? RabbitMQ 当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止 A 组访问 B 组的交换机 / 队列 / 绑定,必须为 A 和 B 分别创建一个虚拟主机。每一个 RabbitMQ 服务器都有一个默认的虚拟主机 “/”
  队列( Queue ):由消费者建立的,是 messages 的终点,可以理解成装消息的容器。消息一直存在队列里,直到有客户端或者称为 Consumer 消费者连接到这个队列并将 message 取走为止。队列可以有多个。
  交换机( Exchange ):可以理解成具有路由表的路由程序。每个消息都有一个路由键( routing key ),就是一个简单的字符串。交换机中有一系列的绑定( binding ),即路由规则( routes )。交换机可以有多个。多个队列可以和同一个交换机绑定,同时多个交换机也可以和同一个队列绑定。(多对多的关系)
  三种交换机:
  1.   :一个发送到交换机上的消息都会被转发到与该交换机绑定的所有队列上。 Fanout 交换机发消息是最快的
  2.   Direct Exchange (处理路由键):如果一个队列绑定到该交换机上,并且当前要求路由键为 X ,只有路由键是 X 的消息才会被这个队列转发。
  3.   Topic Exchange (将路由键和某模式进行匹配,可以理解成模糊处理):路由键的词由 “.” 隔开,符号 “#” 表示匹配 0 个或多个词,符号 “*” 表示匹配不多不少一个词。
  因此 “  audit.#  ” 能够匹配到 “  audit.irs.corporate  ” ,但是 “  audit.*  ” 只会匹配到 “  audit.irs  ”
  持久化:队列和交换机有一个创建时指定的标志durable,具有这个标志的队列和交换机会在重启之后重新建立,它不表示说在队列当中的消息会在重启后恢复
  当你将消息发布到交换机的时候,可以指定一个标志“Delivery Mode”(投递模式)。根据你使用的AMQP的库不同,指定这个标志的方法可能不太一样。简单的说,就是将 Delivery Mode设置成2,也就是持久的即可。一般的AMQP库都是将Delivery Mode设置成1,也就是非持久的。所以要持久化消息的步骤如下:
  1.   将交换机设成 durable 。
  2.   将队列设成 durable 。
  3.   将消息的 Delivery Mode 设置成 2 。
  绑定( Bindings )如何持久化?我们无法在创建绑定的时候设置成 durable 。没问题,如果绑定了一个 durable 的队列和一个 durable 的交换机, RabbitMQ 会自动保留这个绑定。类似的,如果删除了某个队列或交换机(无论是不是 durable ),依赖它的绑定都会自动删除。
注意两点:
  1.   RabbitMQ 不允许绑定一个非坚固( non-durable )的交换机和一个 durable 的队列。反之亦然。要想成功必须队列和交换机都是 durable 的。
  2.   一旦创建了队列和交换机,就不能修改其标志了。例如,如果创建了一个 non-durable 的队列,然后想把它改变成 durable 的,唯一的办法就是删除这个队列然后重现创建。因此,最好仔细检查创建的标志。
消息队列(MQ)使用过程
  转载:http://www.tuicool.com/articles/6BRzMji
  几个概念说明:
  1.  Broker:简单来说就是消息队列服务器实体。
  2.  Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
  3.  Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
  4.  Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  5.  Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  6.  vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  7.  producer:消息生产者,就是投递消息的程序。
  8.  consumer:消息消费者,就是接受消息的程序。
  9.  channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
  消息队列的使用过程大概如下:
  1.  客户端连接到消息队列服务器,打开一个channel。
  2.  客户端声明一个exchange,并设置相关属性。
  3.  客户端声明一个queue,并设置相关属性。
  4.  客户端使用routing key,在exchange和queue之间建立好绑定关系。
  5.  客户端投递消息到exchange。
  6.  exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
rabbitMQ的优点(适用范围)
  1.        基于erlang语言开发具有高可用高并发的优点,适合集群服务器。
  2.        健壮、稳定、易用、跨平台、支持多种语言、文档齐全。
  3.        有消息确认机制和持久化机制,可靠性高。
  4.        开源

运维网声明 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-390416-1-1.html 上篇帖子: RabbitMQ与AMQP 下篇帖子: UVA12545(比特转换器)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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