zoukankan      html  css  js  c++  java
  • RabbitMQ的消息模型

    第一种模型(直连)

    在上图的模型中,有以下概念:

    • P:生产者,也就是要发送消息的程序
    • C:消费者:消息的接受者,会一直等待消息到来。
    • queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。

    第二种模型(work quene)

    Work queues,也被称为(Task queues),任务模型。当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。此时就可以使用work 模型:让多个消费者绑定到一个队列,共同消费队列中的消息。队列中的消息一旦消费,就会消失,因此任务是不会被重复执行的。

    角色:

    • P:生产者:任务的发布者
    • C1:消费者-1,领取任务并且完成任务,假设完成速度较慢
    • C2:消费者-2:领取任务并完成任务,假设完成速度快

    消息自动确认机制

    • 设置通道一次只能消费一个消息

    • 关闭消息的自动确认,开启手动确认消息

    第三种模型(fanout)

    在广播模式下,消息发送流程是这样的:

    • 可以有多个消费者
    • 每个消费者有自己的queue(队列)
    • 每个队列都要绑定到Exchange(交换机)
    • 生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定。
    • 交换机把消息发送给绑定过的所有队列
    • 队列的消费者都能拿到消息。实现一条消息被多个消费者消费

    第四种模型(Routing)-Direct(直连)

    在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。

    在Direct模型下:

    • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
    • 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey
    • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息

    第五种模型(Routing)-Topic

    Topic类型的ExchangeDirect相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符!这种模型Routingkey 一般都是由一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert

  • 相关阅读:
    Set up width and height tcl tk main window
    makefile
    itk_component add
    android的各种*.img 文件
    Install Android 2.2.1 Froyo On Nook Color [Advanced Guide]
    Android开机启动流程初探
    编译MTK6516脚本
    调试MTK6516错误总结
    Android开机启动流程初探
    编译MTK6516脚本
  • 原文地址:https://www.cnblogs.com/weijiqian/p/14821700.html
Copyright © 2011-2022 走看看