• RabbitMQ的6种工作模式详解及应用场景


    1.组件介绍

    1.Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输,
    2. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
    3. Queue:消息的载体,每个消息都会被投到一个或多个队列。
    4. Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来.
    5. Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
    6. vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离。
    7. Producer:消息生产者,就是投递消息的程序.
    8. Consumer:消息消费者,就是接受消息的程序.
    9. Channel:消息通道,在客户端的每个连接里,可建立多个channel.
    2 消息发布和接收流程

    RabbitMQ几种工作模式

    1、简单模式
    2、Work queues
    3、Publish/Subscribe
    4、Routing
    5、Topics
    6、RPC

    1. 简单模式

    这个比较简单,就是一个生产者、一个队列、一个消费者,这种交换机是不参与的。

    2.Work queues

    应用场景

    创建一个工作队列(Work Queue),它会发送一些耗时的任务给多个工作者(Worker)。
    在多个消息的情况下,Work Queue 会将消息分派给不同的消费者,每个消费者都会接收到不同的消息,并且可以根据处理消息的速度来接收消息的数量,进而让消费者程序发挥最大性能。
    Work Queue 特别适合在集群环境中做异步处理,能最大程序发挥每一台服务器的性能。
    在高并发情况下,队列里面的消息很容易产生积压,此模式可以扩容消费者进行负载均衡处理消息。
    总结: 一个消费者干不完的活, 分100个人, 一起干.
    每个消费者接受的数据不重复, 多个消费者的总量和 生产者的是一样的.

    3.Publish发布订阅模式

    生产者->交换机->(多个)队列->消费者
    发布订阅模式:
    1、每个消费者监听自己的队列。
    2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息

    应用场景

    一条消息, 会经过交换机, 同时发送到 多个 队列里面去, 多个队列数据是一样的.

    4.Routing路由模式

    路由模式:
    1、每个消费者监听自己的队列,并且设置routingkey。
    2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列。

    应用场景

    路由(Routing)模式是在发布订阅模式基础上的变种,发布订阅模式是无条件将所有消息分发给所有消费者队列。路由模式则是 Exchange 根据 Routing Key 有条件的将数据筛选后发给消费者队列。
    就用上图不同级别日志来说,对于 error 级别的日志信息可能是我们需要特别关注的,会被单单独的消费者进行处理,此时交换机分发消息是有条件的进行分发,这个就是根据 Routing Key 进行不同的消息分发。
    路由模式是一种精准的匹配,只有设置了 Routing Key 消息才能进行分发。可以,在实际的工作中还有一些非常模糊的情况,也就是路由模式的升级版,主题模式。

    5.Topics 统配符模式

    路由模式:
    1、每个消费者监听自己的队列,并且设置带统配符的routingkey。
    2、生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。

    应用场景

    主题模式是在原有的 Routing Key 增加了通配符,可以进行 Routing Key 的模糊匹配,进行更加灵活的消息分发。
    和#,分表是主题模式的通配符,代表单个关键字,#代表多个关键字。

    在实际使用场景中, 路由模式的效率是高于主题模式,实际工作中可以使用路由模式解决的问题就尽量不要采用主题模式。

    6.RPC

    RPC即客户端远程调用服务端的方法 ,使用MQ可以实现RPC的异步调用,基于Direct交换机实现,流程如下:
    1、客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
    2、服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果
    3、服务端将RPC方法 的结果发送到RPC响应队列
    4、客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。

    应用场景

    我们都清楚作为 MQ 本质上都是异步通讯的,作为生产者将消息送达消息队列后呢,作为生产者他的任务就完成了。至于消费者什么时候消费的最终结果呢,生产者是不关心的。
    但是很多时间,异步情况并不能满足我们的需求。很多时候生产者产生消息之后,需要得到消费者消费的结果。这种情况下非常像平时的 RPC 远程调用,这种情况下 RabbitMQ 也提供了对应得工作模式。

    这里实际上有两个队列,作为 clinet 产生了消息后,会将 broker 会将消息放入队列。
    接着,会被 server 进行消费,消费后的结果也会放入队列,之后会被 client 进行处理。
    而这整个过程,线程会进入阻塞状态,这种模式在实际工作中不怎么用。

  • 相关阅读:
    linux 共享内存 信号量 同步
    进程间通信 共享内存
    linux 多进程绑定问题
    C 语言调用python 脚本函数
    C 语言 和 python 调用 .so 文件
    好好学习
    three.js
    AMD、CMD、UMD 模块的写法
    webpack查缺补漏
    什么是 Web 服务器(server)
  • 原文地址:https://www.cnblogs.com/weijiqian/p/16337810.html
Copyright © 2020-2023  润新知