OWT Server 基于 RabbitMQ 的 RPC 工作模式分析

2023-11-22 15:08

本文主要是介绍OWT Server 基于 RabbitMQ 的 RPC 工作模式分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上篇文章提到过,OWT Server是模块化的结构,各个模块是可以独立部署的,模块之间的RPC调用都是基于消息队列RabbitMQ实现的。这篇文章分析一下OWT Server 基于RabbitMQ的RPC都有几种工作模式。

RabbitMQ 工作模式

先简单复习一下RabbitMQ 的工作模式,详细浏览其官网介绍。

RabbitMQ有3个重要概念 交换机exchange、路由键routing_key、队列queue。

1. 简单模式

一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。
在这里插入图片描述

2. 工作队列模式

一个生产者、多个消费者(竞争关系,只能消费一次),不需要设置交换机(使用默认的交换机)。
在这里插入图片描述

3. 发布订阅模式

需要配置类型为 fanout 的交换机,把交换机和队列进行绑定,当发送消息到交换机上后,交换机会将消息发送到绑定的队列。
在这里插入图片描述

4. 路由模式

需要配置类型为 direct 的交换机,把交换机和自身的队列queue进行绑定,绑定的同时可以指定路由键 routing key,当发送消息到交换机后,交换机会根据 routing key 将消息发送到对应的队列。
例子中C1订阅error消息,C2订阅info error warning消息。
在这里插入图片描述

5. Topic模式

需要配置类型为 topic 的交换机,把交换机和自身的队列queue进行绑定,定时订阅带有通配符的路由键的消息。交换机收到消息后根据路由键分发消息到不同的队列。如果不同的队列订阅了相同的路由键,则都能收到相关的消息。
在这里插入图片描述

OWT Server 基于 RabbitMQ 的工作模式

OWT Server使用node.js amqp这个库来连接的RabbitMQ,这是一个古老的库,已经好久没更新了。并且它还不支持RabbitMQ集群,有能力可以使用其他更优秀的库替换。

OWT 把 amqp 库进行封装为amqp_client.js文件,所有的模块都共用这个文件里面的函数。接下来分析一下这个文件。

1. rpcServer

rpcServer 主要提供RPC接口功能。
rpcServer 和 rpcClient 使用 direct 类型的交换机 owtRpc,对应RabbitMQ 路由工作模式。

先声明一个exchange,然后再声明一个固定名字的 queue 绑定到 direct 交换机 owtRpc 上。

例如:
Conference agent 在加入集群后,会声明一个名字格式为conference-2bf8b52c0331115b3d78@172.17.0.1的queue,提供getNode()等功能的RPC服务。

Conference node 启动后会声明一个名字类似 conference-2bf8b52c0331115b3d78@172.17.0.1_1的queue,来提供实际的会议控制相关接口。

2. rpcClient

rpcClient 主要功能是对远程的模块进行RPC调用。

声明一个随机名字的队列queue,然后绑定到交换机 owtRpc 上,订阅消息用来接收RPC的结果。

调用的时候往交换机 owtRpc 上指定的路由键发 routing_key 送消息,这个路由键就是提供服务的模块绑定的路由键。

发送消息的同时把自身使用的随机名字的队列 queue 名字作为消息一起发送出去。rpcServer收到消息,即收到RPC调用,处理结束后把结果发到这个随机名字的queue上。这样就完成了一次RPC调用。

例如:
Conference agent 刚启动就会声明一个,随机名字 amq.gen-dfir4N5aySaqJVQnybz02Q的queue,这个名字只作为远程调用的参数传递给RPC服务侧,供返回调用结果。

3. topicParticipant

使用一个指定名字的 topic 类型的 交换机exchange,对应RabbitMQ的Topic模式。
声明一个随机名字的队列queue,可以订阅指定Topic的消息。
也可以发布指定Topic的消息。

例如:
Cluster manager 会声明一个topic类型的交换机owt-cluster.management 用来与其他的Cluster manager 通信。

4. monitoringTarget

monitoringTargetfaultMonitor 是一对,一个用来发送 模块退出消息,另一个接收模块退出消息。

使用 topic 类型的交换机 owtMonitoring。用来发送Topic为'exit.'前缀的消息。

例如:
Conference agent 在检测到其创建管理的进程异常退出后,会发送一个exit.abnormal主题的消息出去,这里类似于广播。

5. faultMonitor

使用 topic 类型的交换机 owtMonitoring。订阅Topic为'exit.#'的消息。

刚才说了Conference agent会广播一条exit.abnormal 消息通知大家 conference node-01挂掉了,所有的模块收到这个消息后,如果发现自身与这个 conference node-01有交互,比如video node检测到其所在的会议控制模块就是这个 conference node - 01,那这个video node 自己就退出了,因为它活着已经没意义了。

这篇关于OWT Server 基于 RabbitMQ 的 RPC 工作模式分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410992

相关文章

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化: