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

相关文章

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

SpringBoot整合Canal+RabbitMQ监听数据变更详解

《SpringBoot整合Canal+RabbitMQ监听数据变更详解》在现代分布式系统中,实时获取数据库的变更信息是一个常见的需求,本文将介绍SpringBoot如何通过整合Canal和Rabbit... 目录需求步骤环境搭建整合SpringBoot与Canal实现客户端Canal整合RabbitMQSp

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

嵌入式方向的毕业生,找工作很迷茫

一个应届硕士生的问题: 虽然我明白想成为技术大牛需要日积月累的磨练,但我总感觉自己学习方法或者哪些方面有问题,时间一天天过去,自己也每天不停学习,但总感觉自己没有想象中那样进步,总感觉找不到一个很清晰的学习规划……眼看 9 月份就要参加秋招了,我想毕业了去大城市磨练几年,涨涨见识,拓开眼界多学点东西。但是感觉自己的实力还是很不够,内心慌得不行,总怕浪费了这人生唯一的校招机会,当然我也明白,毕业