zoukankan      html  css  js  c++  java
  • 初学RabbitMQ

    一、RabbitMQ中的一些概念

     (1)Connection(连接)

      与RabbitMQ建立连接,由ConnectionFactory创建每个Connection至于一个物理server进行连接,此链接基于Socket进行连接,可以理解为一个dbConnection

     (2)Channel(通道)

      在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

     (3)Exchange(交换器)

       交换机,决定了消息路由规则,路由到哪个队列。

     (4)Queue(队列)

       消息队列载体,每个消息都会被投入到一个或多个队列。

     (5)Bind(绑定器)

      把exchange和queue按照路由规则绑定起来

     (6)RoutingKey(路由关键字最多不能超过255个字符)

      exchange根据这个关键字进行消息投递

    二、消息队列使用过程

      (1)客户端连接到消息服务器
        (2)打开一个channel
        (3)声明一个exchange并设置属性
        (4)声明一个queue并设置属性
        (5)使用Routing key在exchange和queue之间绑定关系
        (6)客户端消息发送到exchange
        (7)Exchange接受到消息,根据key和已经设置的bingding,进行消息路由,将消息发送到一个或多个队列中
        (8)消费者消费
     
    三、这个过程走分三个部分:
      (1)客户端(生产消息队列)
        (2)RabbitMQ服务端(负责路由规则的绑定与消息的分发)
        (3)客户端(消费消息队列中的消息)
     
    四、一个消息可以走一次网络却被分发到不同的消息队列中,然后被多个的客户端消费,那么这个过程就是RabbitMQ的核心机制,RabbitMQ的路由类型与消费模式
     
    五、RabbitMQ中Exchange的类型

    类型有4种,direct,fanout,topic,headers。其中headers不常用,本篇不做介绍,其他三种类型,会做详细介绍。

        (1)Exchange类型direct
            他是根据交换器名称与routingkey来找队列的。

    Note:消息从client发出,传送给交换器ChangeA,RoutingKey为routingkey.ZLH,那么不管你发送给Queue1,还是Queue2一个消息都会保存在Queue1,Queue2,Queue3,三个队列中。这就是交换器的direct类型的路由规则。只要找到路由器与routingkey绑定的队列,那么他有多少队列,他就分发给多少队列。

        (2)Exchange类型fanout
            这个类型忽略Routingkey,他为广播模式。

    Note:消息从客户端发出,只要queue与exchange有绑定,那么他不管你的Routingkey是什么他都会将消息分发给所有与该exchang绑定的队列中。

        (3)Exchange类型topic
            这个类型的路由规则如果你掌握啦,那是相当的好用,与灵活。他是根据RoutingKey的设置,来做匹配的,其中这里还有两个通配符为:

    *,代表任意的一个词。例如topic.zlh.*,他能够匹配到,topic.zlh.one ,topic.zlh.two ,topic.zlh.abc, ....

    #,代表任意多个词。例如topic.#,他能够匹配到,topic.zlh.one ,topic.zlh.two ,topic.zlh.abc, ....

    六、消息队列的消费与消息确认Ack

      (1)消息队列的消费

    Note:如果一个消息队列中有大量消息等待操作时,我们可以用多个客户端来处理消息,这里的分发机制是采用负载均衡算法中的轮询。第一个消息给A,下一个消息给B,下下一个消息给A,下下下一个消息给B......以此类推。

        (2)为啦保证消息的安全性,保证此消息被正确处理后才能在服务端的消息队列中删除。那么rabbitmq提供啦ack应答机制,来实现这一功能。

    ack应答有两种方式:1、自动应答,2、手动应答。具体实现如下。

  • 相关阅读:
    看过设计模式第一章的心得
    支付宝支付过程填坑
    C# 合并只要有交集的所有集合
    C#中的反射 Reflection
    动态更改配置文件
    六种弹窗
    Respone弹窗
    Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件
    使用ECharts报表统计公司考勤加班,大家加班多吗?
    排污许可管理条例-中华人民共和国国务院令第736号
  • 原文地址:https://www.cnblogs.com/ck168/p/5554470.html
Copyright © 2011-2022 走看看