美文网首页
RabbitMQ 学习笔记

RabbitMQ 学习笔记

作者: 华阳_3bcf | 来源:发表于2018-09-27 17:30 被阅读0次

    RabbitMQ 是一个支持多种消息传递协议的消息代理, 支持 AMQP(一个具有强大路由功能的开放式连接协议),实现了信息发送者和接受者的解耦。

    整体架构

    rabbitmqStructure.jpg rabbitmq.png

    上面两张图表示了同样的意思,消息传递分为三部分:

    • 生产者(Producer/Publisher)生产和发送消息。
    • 代理(Broker)也被称为messagebus,负责消息的路由和分发(维护一条从Producer到Consumer的线路)。RabbitMQ就工作在这部分。
    • 消费者(Consumer)接收消息。

    术语

    Producer

    • 生成消息并发送到MQ
    • Message包含 payload(有效载荷) 和 label。payload就是传输的消息,label是exchange的名字或者一个tag,它描述了payload,RabbitMQ通过label来决定把这个Message发给哪个comsumer。
    • 不属于RabbitMQ的一部分,e.g. Gerrit。
    • 多种语言都能用来发消息。

    Consumer

    • 从队列(queue)里面读 messages
    • 读(read/consume)和 确认(ack)消息
    • 不属于RabbitMQ的一部分,e.g. Jenkins。
    • 消息被读取(read&ack)后,它从队列中被删除。

    Broker

    • exchange 邮局 PostOffice(are where producers publish their messages.)

      • 能被动态创建
      • 可以被多个队列绑定
      • 多个type (不同的路由算法)
        • Direct (如果 routing key 匹配, 那么Message就会被传递到相应的queue中。)
        • Fanout (会向响应的queue广播)
        • Headers
        • Topic (对key进行模式匹配,比如ab* 可以传递到所有ab*的queue)
    • queue 邮箱 Mailbox (where the messages end up and are received by consumers)

      • 能被动态创建
    • binding 控制消息路由

      • links exchange and queue
      • binding key
      • 能被动态创建

      还有几个概念是上述图中没有标明的,那就是Connection(连接),Channel(通道,频道)。

      Connection: 就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。

      Channels: 虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。 目的是共用TCP连接,减少消耗。

    Virtual hosts

    每个virtual host本质上都是一个RabbitMQ Server,拥有它自己的queue,exchagne,和bings rule等等。这保证了你可以在多个不同的application中使用RabbitMQ。

    实际生产中,我们一般一个server只配置了一个vhost,所以感受不到这一点。

    总结

    RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。

    相关文章

      网友评论

          本文标题:RabbitMQ 学习笔记

          本文链接:https://www.haomeiwen.com/subject/qhxyoftx.html