Soul网关(十三)---- Tars 框架在Soul中的应用

Tars

RPC 框架 —— Tars

简介

Tars 是基于名字服务使用 Tars 协议的高性能 RPC 开发框架,配套一体化的运营管理平台,并通过伸缩调度,实现运维半托管服务。

设计思想

Tars的设计思路是采用微服务的思想对服务进行治理,同时对整个系统的各个模块进行抽象分层,将各个层次之间相互解耦或者松耦合。

整体架构

整体架构的拓扑图主要分为2个部分:服务节点与公共框架节点(除了服务节点以外的服务)

Tars 框架源码待深入研究

Tars Docs

Tars GitHub

Tars 协议

Tars 协议采用接口描述语言(Interface description language,缩写IDL)来实现,它是一种二进制、可扩展、代码自动生成、支持多平台的协议,使得在不同平台上运行的对象和用不同语言编写的程序可以用 RPC 远程调用的方式相互通信交流, 主要应用在后台服务之间的网络传输协议,以及对象的序列化和反序列化等方面。

协议支持的类型分两种,基本类型和复杂类型:

​ 基本类型包括:void、bool、byte、short、int、long、float、double、string、unsigned byte、unsigned short、unsigned int;

​ 复杂类型包括:enum、const、struct、vector、map,以及struct、vector、map的嵌套。

通过IDL语言协议,可以定义服务提供的接口,并自动生成客户端和服务端的相关通信代码,服务端只需实现业务逻辑即可对外提供服务,客户端通过自动生成的代码即可调用服务,调用方式支持三种模式:

同步调用:客户端发出调用请求后等待服务返回结果后再继续逻辑;

异步调用:客户端发出调用请求后继续其他业务逻辑,服务端返回结果又由回调处理类处理结果;

单向调用:客户端发出调用请求后就结束调用,服务端不返回调用结果。

Soul 中的 Tars 插件

当请求来到 TarsPlugin ,会走到 TarsPlugin 的 doExecute() 方法,doExecute() 方法中 通过 ApplicationConfigCache类拿到 Tars 配置。ApplicationConfigCache类 会初始化代理,来订阅soul-admin中元数据的改变。

   @Override
    public void onSubscribe(final MetaData metaData) {
        if (RpcTypeEnum.TARS.getName().equals(metaData.getRpcType())) {
            MetaData metaExist = META_DATA.get(metaData.getPath());
            List<TarsInvokePrx> prxList = ApplicationConfigCache.getInstance()
                    .get(metaData.getPath()).getTarsInvokePrxList();
            boolean exist = prxList.stream().anyMatch(tarsInvokePrx -> tarsInvokePrx.getHost().equals(metaData.getAppName()));
            if (!exist) {
            		// 初始化一个代理 
                ApplicationConfigCache.getInstance().initPrx(metaData);
            }
            if (Objects.isNull(metaExist)) {
                META_DATA.put(metaData.getPath(), metaData);
            }
        }
    }
从 PluginEnum 类可以看出,请求在 tars 插件的处理流程:


BodyParamPlugin ----> TarsPlugin ----> TarsResponsePlugin

​ BodyParamPlugin:对请求体进行分类处理

​ TarsPlugin:加载 tars配置,处理请求

​ TarsResponsePlugin:处理响应数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值