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

相关文章

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录