新闻详情

新闻详情

首页 / 资讯中心 / 详情

Apache ShenYu TARS 协议接入实战:从 IDL、Servant 实现到网关代理 /tars/hello

发布时间:2026/9/25 3:28:45来源:尧图网络
Apache ShenYu TARS 协议接入实战:从 IDL、Servant 实现到网关代理 /tars/hello
后端API网关微服务【免费下载链接】shenyuApache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.项目地址https://gitcode.com/gh_mirrors/sh/shenyu点击查看免费下载Apache ShenYu 除常见的 HTTP、Dubbo、Spring Cloud 等协议外同样支持将 TARS 服务的接口经网关代理为 HTTP 调用。本文以官方示例模块 shenyu-examples-tars 为蓝本完整还原“定义 TARS IDL → 生成 Servant 接口 → 实现并注册到 ShenYu Admin → 通过网关发起代理调用”的全过程帮助你掌握 TARS 服务接入 ShenYu 网关所需的配置项、注解体系与验证方法。示例模块的角色与目录结构shenyu-examples-tars位于 shenyu-examples 目录下是一个独立可运行的 Spring Boot 应用用来演示一个 TARS 应用TARS 中称为 App如何把多个 Servant 接口的元数据注册到 ShenYu Admin从而在网关侧配置路由规则后对外提供 HTTP 访问。模块内的关键文件如下文件作用ShenyuTestTarsApplication.java应用入口开启 TARS Servertest.tarsTARS IDL 接口定义构建时生成 Java 代码servant/testapp/由 IDL 生成的 Servant 接口及手写实现application.ymlShenYu 客户端注册配置与 TARS 监听地址ShenyuExampleServer.ShenyuExampleApp.config.conftarsnode 侧的服务端/适配器配置文件tars-test-api.http经网关验证 TARS 代理的 HTTP 调试脚本构建期准备依赖与 IDL 代码生成pom.xml 中引入了两类关键依赖com.tencent.tars:tars-spring-boot-starter1.7.2提供EnableTarsServer、TarsServant等注解与 TARS 运行时org.apache.shenyu:shenyu-spring-boot-starter-client-tarsShenYu 的 TARS 客户端 starter负责扫描接口上的 ShenYu 注解并向 Admin 注册元数据。同时 pom 配置了tars-maven-plugin在构建阶段把 IDL 文件转换为 Java 源码核心配置为tars2JavaConfig !-- tars file location -- tarsFiles tarsFile${basedir}/src/main/resources/test.tars/tarsFile /tarsFiles servanttrue/servant srcPath${basedir}/src/main/java/srcPath packagePrefixNameorg.apache.shenyu.examples.tars.servant./packagePrefixName /tars2JavaConfigservanttrue表示生成 Servant 接口代码生成结果输出到src/main/java包名前缀固定为org.apache.shenyu.examples.tars.servant.因此生成的接口最终落在servant/testapp包下。IDL 定义见 test.tars模块TestApp声明了三个结构一致的接口module TestApp { interface Hello { string hello(int no, string name); int helloInt(int no, string name); }; interface Order { string hello(int no, string name); int helloInt(int no, string name); }; interface User { string hello(int no, string name); int helloInt(int no, string name); }; };由该 IDL 生成的 HelloServant.java 带有Servant注解方法参数以TarsMethodParameter(name no)之类的方式声明字段名这是 TARS 序列化定位参数所必需的。OrderServant、UserServant与之同构。Servant 实现TARS 注解与 ShenYu 注解的组合以 HelloServantImpl.java 为例实现类上叠加了两组注解TarsServant(HelloObj) ShenyuTarsService(serviceName ShenyuExampleServer.ShenyuExampleApp.HelloObj) ApiModule(value HelloObj) public class HelloServantImpl implements HelloServant { Override ShenyuTarsClient(/hello) ApiDoc(desc hello) public String hello(final int no, final String name) { return String.format(hello no%s, name%s, time%s, no, name, System.currentTimeMillis()); } Log Override ShenyuTarsClient(/helloInt) ApiDoc(desc helloInt) public int helloInt(final int no, final String name) { return 1; } }TarsServant(HelloObj)是 TARS 侧注解把该 Bean 暴露为 TARS 服务端的对象名HelloObjShenyuTarsService(serviceName ...)声明该接口在 ShenYu 侧的服务全名命名遵循 TARS 的应用名.服务名.对象名约定这里是ShenyuExampleServer.ShenyuExampleApp.HelloObjShenyuTarsClient(/hello)声明接口方法对应的网关 API 路径网关将contextPath 该路径的请求转发到对应 Servant 方法ApiModule/ApiDoc属于 ShenYu 的 API 文档注解shenyu-client-api-docs-annotations用于元数据中携带文档信息。OrderServantImpl、UserServantImpl的实现方式相同只是serviceName分别指向...OrderObj、...UserObj。应用入口 ShenyuTestTarsApplication.java 只有两个注解SpringBootApplication与EnableTarsServer后者来自com.qq.tars.spring.annotation负责启动 TARS 服务端框架。运行配置application.yml 与 tarsnode 的 .conf 文件ShenYu 客户端配置application.yml 中需要关注两部分。其一是注册中心配置示例采用 HTTP 直连 ShenYu Admin 的方式注册shenyu: register: registerType: http serverLists: http://localhost:9095 props: username: admin password: 123456 client: tars: props: contextPath: /tars appName: tars port: 21715 host: 192.168.41.103其中client.tars.props的四个参数含义如下参数示例值说明contextPath/tars该批 TARS 接口在网关上的统一前缀最终 API 为contextPath ShenyuTarsClient 路径即/tars/helloappNametars注册到 ShenYu Admin 的应用标识port21715TARS 服务监听端口用于拼装网关转发目标host:porthost192.168.41.103TARS 服务实际部署机器的 IP需按本机环境修改这些值并非随意取值TarsServiceBeanEventListener 的构造逻辑表明contextPath、host、port缺一不可缺失任一都会抛出“tars client must config the contextPath, ipAndPort”异常监听器随后以host : port作为服务地址结合contextPath构造元数据并通过ShenyuClientRegisterEventPublisher把注册事件投递给ShenyuClientRegisterRepository完成向 Admin 的元数据上报。tarsnode 配置文件ShenyuExampleServer.ShenyuExampleApp.config.conf 是 TARS 服务端tarsnode 托管模式的配置文件要点包括node注册到 tarsnode 的地址示例为tcp -h 192.168.41.103 -p 19386app/server分别为ShenyuExampleServer/ShenyuExampleApp与ShenyuTarsService中 serviceName 的前两级一一对应local本应用实际监听的 endpoint示例为tcp -h 127.0.0.1 -p 21715 -t 3000其中的 21715 端口即application.yml中client.tars.props.port的取值来源jvmparams、mainclass以-jar ...ShenyuExampleApp.jar方式启动本应用每个 Servant 对应一个 Adapter 配置块例如ShenyuExampleServer.ShenyuExampleApp.HelloObjAdapter其servant字段指向ShenyuExampleServer.ShenyuExampleApp.HelloObjendpoint与local同端口并配置了maxconns、queuecap、threads等连接与线程参数OrderObjAdapter、UserObjAdapter同理。从源码结构看这份 .conf 文件是 TARS 生态的标准部署配置ShenYu 客户端并不解析它它的价值在于README 要求以-Dconfig显式指定该文件路径使本地以 IDE 方式运行时能加载同一份 tarsnode 配置保证注册到网关的地址、端口与生产部署保持一致。启动示例应用继承 README 的官方步骤按照 模块 README 的说明运行分两步设置 VM options指向模块内的 tarsnode 配置文件-DconfigD:\Code\Java\shenyu\shenyu-examples\shenyu-examples-tars\src\main\resources\ShenyuExampleServer.ShenyuExampleApp.config.confREADME 中给出的是 Windows 示例路径实际使用时请把路径替换为本仓库中 conf 文件 的真实位置。运行 ShenyuTestTarsApplication 的main方法。应用启动后ShenYu TARS 客户端会扫描带ShenyuTarsService的 Bean把每个ShenyuTarsClient方法作为一条元数据含contextPath拼接的 API 路径、参数名列表等注册到 ShenYu Admin示例中为http://localhost:9095。此后即可在 Admin 控制台基于该应用配置 TARS 类型的路由选择器与规则。通过网关验证代理效果验证脚本 tars-test-api.http 展示了网关默认端口 9195侧的调用方式### shenyu gateway proxy hello GET http://localhost:9195/tars/hello Accept: application/json Content-Type: application/json { no: 123, name: order } ### shenyu gateway proxy helloInt GET http://localhost:9195/tars/helloInt Accept: application/json Content-Type: application/json { no: 123, name: order }注意两点网关 URL 形如http://网关host:9195/tars/hello其中/tars来自contextPath/hello、/helloInt来自实现类上的ShenyuTarsClient注解TARS 方法参数no、name以 JSON Body 传递字段名与TarsMethodParameter声明的名称对应与 test.tars IDL 中的签名一致。命中路由后ShenYu 网关会把 JSON 参数反序列化为 TARS 请求经host:21715转发到本地 TARS 服务端HelloServantImpl.hello返回的hello no123, nameorder, time...字符串即最终响应体。小结这个示例虽然只有三组同构接口但完整覆盖了 TARS 协议接入 ShenYu 的全部关键环节构建期用tars-maven-plugin从test.tars生成 Servant 接口运行期用TarsServant暴露 TARS 服务用ShenyuTarsServiceShenyuTarsClient声明注册到网关的 API 映射配置上以application.yml的client.tars.propscontextPath/appName/port/host驱动元数据注册以-Dconfig指定的 .conf 文件驱动 tarsnode 侧部署验证上通过GET http://网关:9195/tars/hello的 JSON 请求闭环“HTTP → TARS”的协议转换链路。理解并跑通该示例后即可将同样的注解与配置模式迁移到你自己的 TARS 应用中实现 HTTP 客户端对 TARS 服务的透明访问。赞分享后端API网关微服务【免费下载链接】shenyuApache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.项目地址https://gitcode.com/gh_mirrors/sh/shenyu点击查看免费下载相关推荐AgentScope 嵌入模型详解文本向量化、语义检索与参数调优AgentScope 嵌入模型详解文本向量化、语义检索与参数调优 AgentScope 的嵌入模型把文本以及图片等数据转成一串向量让意思相近变成距人工智能大模型AI Agent多智能体Agent 框架Agent 编排工具调用RAGMCP 服务语音如何快速掌握Tars协议栈从0到1理解高效RPC通信的底层实现如何快速掌握Tars协议栈从0到1理解高效RPC通信的底层实现 Tars是腾讯开源的高性能RPC服务框架从2008年至今持续为后台服务提供稳定支撑。作为一款后端微服务30分钟掌握Apache Thrift IDL从入门到接口设计实战30分钟掌握Apache Thrift IDL从入门到接口设计实战 Apache Thrift是一个跨语言的远程过程调用框架主要用于构建高效可靠的分布式系统后端RPC框架序列化代码生成上一篇gitignore.io区块链模板市场去中心化资源共享下一篇Starscream中的数据转换String与Data的高效处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Learn-Algorithms 面试专题:二叉树遍历的递归与非递归实现、层序打印与深度求解实战 2026/9/25 6:06:55

Learn-Algorithms 面试专题:二叉树遍历的递归与非递归实现、层序打印与深度求解实战

教程 【免费下载链接】Learn-Algorithms 算法学习笔记 项目地址: https://gitcode.com/gh_mirrors/le/Learn-Algorithms 点击查看 免费下载 本篇技术指南聚焦 Learn-Algorithms 仓库「9 Algorithms Job Interview」目录下的「7.1 二叉树-遍历」专题,系统…

阅读更多 →
x86汇编实战指南:高频指令、寻址方式与栈帧调试 2026/9/25 6:06:49

x86汇编实战指南:高频指令、寻址方式与栈帧调试

1. 为什么还要啃x86汇编这块硬骨头很多人第一次接触汇编,脑子里冒出来的画面大概是黑底白字、满屏寄存器名、看一眼就想关掉。尤其是现在高级语言和框架已经把底层包得严严实实,写业务代码根本碰不到eax、ebp这些东西。但只要你做过逆向分析、性能调优、…

阅读更多 →
ax 调度与 Agentic Orchestrator:用 CLI 编排 codex、claude 智能体 2026/9/25 6:06:49

ax 调度与 Agentic Orchestrator:用 CLI 编排 codex、claude 智能体

1. 从"ax"这个标题说起:一个被低估的编排入口第一次看到"ax"这个标题,很多人会一头雾水——两个字母,没有上下文,没有正文,没有关键词。但如果你把热搜词摊开来看,线索其实非常清晰&am…

阅读更多 →
ZCode安全机制全解:权限系统、远程访问令牌与代码数据保护的完整设计 2026/9/25 6:06:49

ZCode安全机制全解:权限系统、远程访问令牌与代码数据保护的完整设计

ZCode安全机制全解:权限系统、远程访问令牌与代码数据保护的完整设计 【免费下载链接】ZCode ZCode 是 AI 编程工作台,提供桌面应用、浏览器界面和终端 Agent。本仓库包含客户端、后端服务、共享 UI,以及 Agent CLI 与运行时源码。 项目地址…

阅读更多 →
PPT插入视频倍速播放的三种可行方案与实操指南 2026/9/25 6:06:49

PPT插入视频倍速播放的三种可行方案与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ax运行时编排:Agentic场景下的Agent调度与生命周期管理 2026/9/25 6:06:49

ax运行时编排:Agentic场景下的Agent调度与生命周期管理

1. 从“ax”这个标题说起:一个被低估的运行时编排命题第一次看到“ax”这个标题,很多人会以为是某个命令行工具的缩写,或者某个前端库的代号。但把热搜词摊开来看——ax、agentic、orchestration、runtime、Kubernetes、Karmada、device plug…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉