首页 > 其他分享 >消息中间件RabbitMQ_RabbitMQ的工作模式4

消息中间件RabbitMQ_RabbitMQ的工作模式4

时间:2024-04-12 13:11:50浏览次数:25  
标签:队列 模式 交换机 消息 key 消息中间件 RabbitMQ routing

一、Work queues 工作队列模式

 1、模式说明

  

  • Work Queues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。
  • 应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。

 2、代码编写

  Work Queues 与入门程序的简单模式的代码几乎是一样的。可以完全复制,并多复制一个消费者进行多个消费者同时对消费消息的测试。

 3、小结

  1. 在一个队列中如果有多个消费者,那么消费者之间对于同一个消息的关系是竞争的关系。

  2. Work Queues 对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。例如:短信服务部署多个,只需要有一个节点成功发送即可。

 

 

二、Pub/Sub 订阅模式 

 1、模式说明

  

  在订阅模型中,多了一个 Exchange 角色,而且过程略有变化:

  • P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)
  • C:消费者,消息的接收者,会一直等待消息到来
  • Queue:消息队列,接收消息、缓存消息
  • Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:
    • Fanout:广播,将消息交给所有绑定到交换机的队列
    • Direct:定向,把消息交给符合指定routing key 的队列
    • Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

   Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息会丢失!

 2、代码编写

 

 3、小结

  1. 交换机需要与队列进行绑定,绑定之后;一个消息可以被多个消费者都收到。
  2. 发布订阅模式与工作队列模式的区别:

    • 工作队列模式不用定义交换机,而发布/订阅模式需要定义交换机
    • 发布/订阅模式的生产方是面向交换机发送消息,工作队列模式的生产方是面向队列发送消息(底层使用默认交换机)
    • 发布/订阅模式需要设置队列和交换机的绑定,工作队列模式不需要设置,实际上工作队列模式会将队列绑 定到默认的交换机

三、Routing 路由模式

 1、模式说明:

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

  

  图解:

    • P:生产者,向 Exchange 发送消息,发送消息时,会指定一个routing key
    • X:Exchange(交换机),接收生产者的消息,然后把消息递交给与 routing key 完全匹配的队列
    • C1:消费者,其所在队列指定了需要 routing key 为 error 的消息
    • C2:消费者,其所在队列指定了需要 routing key 为 info、error、warning 的消息

 2、代码编写

 

 3、小结

  Routing 模式要求队列在绑定交换机时要指定 routing key,消息会转发到符合 routing key 的队列。

四、Topics 通配符模式

 1、模式说明

  • Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用通配符!
  • Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert
  • 通配符规则:# 匹配一个或多个词,* 匹配不多不少恰好1个词,例如:item.# 能够匹配 item.insert.abc 或者 item.insert,item.* 只能匹配 item.insert

  

  

  图解:

    • 红色 Queue:绑定的是 usa.# ,因此凡是以 usa. 开头的 routing key 都会被匹配到
    • 黄色 Queue:绑定的是 #.news ,因此凡是以 .news 结尾的 routing key 都会被匹配

 2、代码编写

 

 3、小结

  Topic 主题模式可以实现 Pub/Sub 发布与订阅模式和 Routing 路由模式的功能,只是 Topic 在配置routing key 的时候可以使用通配符,显得更加灵活。

 

五、工作模式总结

 1、简单模式 HelloWorld
  一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。

 2、工作队列模式 Work Queue
  一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)。

 3、发布订阅模式 Publish/subscribe
  需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。

 4、路由模式 Routing
  需要设置类型为 direct 的交换机,交换机和队列进行绑定,并且指定 routing key,当发送消息到交换机后,交换机会根据 routing key 将消息发送到对应的队列。

 5、通配符模式 Topic
  需要设置类型为 topic 的交换机,交换机和队列进行绑定,并且指定通配符方式的 routing key,当发送消息到交换机后,交换机会根据 routing key 将消息发送到对应的队列。

 

标签:队列,模式,交换机,消息,key,消息中间件,RabbitMQ,routing
From: https://www.cnblogs.com/ajing2018/p/18130956

相关文章

  • 汇编语言简易教程(8):寻址模式
    汇编语言简易教程(8):寻址模式寻址模式是使用正在访问(读取或写入)的数据项的地址来访问内存中的值的受支持方法。这可能包括变量的名称或数组中的位置。基本的寻址模式包含:寄存器立即数内存寻址注意事项使用[]需要注意:访问内存的唯一方法是使用方括号([]'s)。省略括号......
  • 汇编语言简易教程(8):寻址模式
    汇编语言简易教程(8):寻址模式寻址模式是使用正在访问(读取或写入)的数据项的地址来访问内存中的值的受支持方法。这可能包括变量的名称或数组中的位置。基本的寻址模式包含:寄存器立即数内存寻址注意事项使用[]需要注意:访问内存的唯一方法是使用方括号([]'s)。省略括号......
  • 建造者模式
    建造者模式也称为Builder模式,在开发中也是经常用到的,下面围绕两个问题来看下:1、为什么需要建造者模式假设在开发中我们有这样一个需求:需要定义一个资源池配置类ResourcePoolConfig。这里的资源池,你可以简单理解为线程池、连接池、对象池等。在这个资源池配置类中,有......
  • pycharm使用debug模式调试不生效问题
    1、设置中配置 TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianChineseTraditionalIndonesianSlovakCzechItalianSlovenianDanishJapaneseSp......
  • 读论文-基于序列模式的电子商务推荐系统综述(A Survey of Sequential Pattern Based E
    前言今天读的论文为一篇于2023年10月3日发表在《算法》(Algorithms)的论文,这篇文章综述了基于序列模式的电子商务推荐系统,强调了通过整合用户购买和点击行为的序列模式来提高推荐准确性、减少数据稀疏性、增加推荐新颖性,并改善推荐系统的可扩展性。文章详细分析了现有推荐系统的......
  • TypeScript的严格模式,any和unknown都是顶级类型,any 和 unknown 的区别
    TypeScript中的严格模式在TS的严格模式中;不可以将null,undefined赋值给void;但是在非严格模式中就可以。Tip:在项目中;我们还是要开启严格模式,否则会出现意想不到的错误,我们可以在tsconfig.json文件的compilerOptions的strict中去配置tsconfig.json{"compilerOpti......
  • 01_在NET中使用RabbitMQ
    1.Linux上安装Docken服务器系统版本以及内核版本:cat/etc/redhat-release查看服务器内核版本:uname-r安装依赖包:yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2设置阿里云镜像源:yum-config-manager--add-repohttps://mirrors.aliyun.com/docker-ce/linu......
  • fs.1.10 ON CENTOS7 dockerfile模式
     概述freeswitch是一款简单好用的VOIP开源软交换平台。centos7docker上编译安装fs.1.10的流程记录,本文使用dockerfile模式。环境dockerengine:Version24.0.6centosdocker:7freeswitch:v1.10.7dockerfile创建空目录,创建dockerfile文件。github访问经常失败,先下载好源......
  • 工厂模式
    工厂模式分为:简单工厂、工厂方法、抽象工厂(了解即可)1、工厂模式的作用这也是考虑要不要使用工厂模式的标准:——封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。——代码复用:创建代码抽离到独立的工厂类之后可以复用。——隔离复杂性:封装......
  • 高通平台 按键 进入 fastboot/recovery/edl 模式
    在大多数高通平台上,默认都提供以下的按键功能:按住 vol+ 键开机,进入recovery模式。按住 vol- 键开机,进入fastboot模式。按住 vol+ 键及 vol- 键开机,进入edl(EmergencyDownload)模式。 高通方案的Android设备主要有以下几种开机模式,Android、EDL、Fastboot、Re......