zoukankan      html  css  js  c++  java
  • RabbitMQ的整个通信过程

    一:根据上图标注的序号来依次介绍每一步要做的事情:

    1:生产者生产消息后,将消息发布给交换器黑EX;

    2:交换器黑EX根据路由规则将消息路由到队列黑queue;

    3:Broker再将队列黑queue中的消息投递给订阅该队列的消费者,或者是消费者从队列黑queue中获取消息;

    4:给黑EX绑定一个备份交换器绿EX,当到达黑EX的消息不能被正确路由到任何队列时,被发送给备份交换器绿EX;

    5:备份交换器绿EX根据路由规则将消息路由到备份队列绿queue,存储起来;

    6:由于可以给消息设置过期时间,所以当队列黑queue中的消息达到过期时间仍未被消费时,会被发送到死信交换器红EX中;或者发送给消费者的消息被消费者拒绝后,也会被发送到死信交换器红EX中;

    7:死信交换器红EX根据路由规则将消息路由到死信队列红queue,存储起来;

    二:根据上图介绍可能涉及的知识点:

    (1):当黑EX不能经过第2步将消息路由到任何队列时,则将消息发送到备份交换器绿EX,并存储到备份队列中,之后在需要的时候再去处理;有关备份交换器的介绍可以点击《备份交换器》

    (2):可以设置消息在队列中的过期时间,当消息达到黑queue中,如果在过期时间到了仍未被消费,则会经过第6步和第7步将消息发送到死信队列红queue中,后续可以分析死信队列中的内容来分析当时遇到的异常情况;有关死信队列的介绍可以点击《死信队列》

    (3):消息达到黑queue后,最终会经过第3步被消费者消费;消费者消费消息有两种模式:推和拉;有关消费模式的介绍可以点击《消费者的消费模式》

    (4):黑queue中存放的是生产者生产的消息,最终供消费者去消费;RabbitMQ有消息确认规则,发送给消费者的消息需要等到消费者明确给出回应(确认或拒绝)后,才会在队列中做出相应的处理(从队列中删除或者保留在队列中);所以队列中的消息可以分为两部分,一部分是未发送给消费者的消息,二部分是已经发送给消费者消费,但是还未收到消费者回应的消息;有关消息队列的介绍可以点击《消息队列》

    (5):消费者消费黑queue中的消息后,需要给队列一个回应,从而让队列对消费的消息做出相应的处理,这个回应可以是确认、拒绝,也可以是重发;有关消费者对消息的确认、拒绝和重发的介绍可以点击《消费者对消息的确认、拒绝和重发》。

  • 相关阅读:
    “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
    std::ostringstream 转std::string
    【转载】红外感应模块+蜂鸣器实现简易报警
    分割字符串使用空格
    优秀程序员的 18 大法则【转载】
    解决win10 iot VS编程出现的无法引用错误
    [转载] 程序员如何成功追到女神?
    win8/win10/win2012r2 存储池 冗余分析
    [转载][NAS] 使用win8的“存储池”功能~
    mySQL中删除unique key的语法 (删除某个字段的唯一性)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302423.html
Copyright © 2011-2022 走看看