当前位置: 首页 > news >正文

分布式接口文档聚合,Solon 是怎么做的?

1、分布式接口文档聚合,是什么?

如果你有 “22” 个不同的服务(比如微服务),每个服务都有自己的接口文档。每个服务的文档各自打开,估计你会觉得很麻烦的?

再如果,它们是用 openapi 规范的。现在,可以通过一个服务去聚合它们。就是,在一个地址里,打开 “22” 个服务的接口文档。

2、认识 Solon-Docs

solon-docs,是 solon 的接口文档解决方案。它通过 DocDocket 申明文档摘要。支持 swagger 注解,或者 javadoc 注释,或者别的(可适配)。

从文档网关的角度(此文讲聚合嘛),只需使用 groupName, basicAuth, upstream 三个配置项,就可以接入外部服务的接口文档:

@Configuration
public class DocConfig {@Bean("appApi")public DocDocket appApi() {return new DocDocket().groupName("app端接口").version("2.0") //可选,默认是 2.0.basicAuth("admin", "1234") //可选(添加 basic auth 验证).upstream("http://demo.com.cn", "/demo", "swagger/v2?group=appApi");}
}

upstream 配置值,切不要连接自己(否则,可能会死循环),其属性有:

属性说明
service目标服务名
contextPath服务上下文路径(在网关处,方便识别是哪个服务的,进而调用)
uri接口文档地址

solon-docs 也可以通过 solon.docs 配置,完成 DocDocket 自动构建。

3、了解 solon.docs 配置格式自动构建

使用 solon.docs 配置,可以替代 solon bean 的构建方式。格式如下

solon.docs:discover:uriPattern: "swagger/v2?group={service}"  #目标服务的文档接口路径模式(要么带变量 {service},要么用统一固定值)syncStatus: false  #同步目标服务上下线状态(如果下线,则文档不显示)basicAuth:           #可选admin: 1234      excluded:  #排除目标服务名- "xx"included:  #包括目标服务名- "yy"routes:name1: DocDocketname2: DocDocket

discover 配置项是专为聚合便利设计的,方便通过注册与发现服务聚合文档。格式说明:

配置名说明
discover用于配置分布式发现服务相关的(即,自动配置文档)
discover.uriPattern目标服务的文档接口路径模式,支持{service}占位符
discover.syncStatus同步目标服务上下线状态
discover.basicAuth添加 basic auth 验证(同时会传递给目标服务的文档摘要)
discover.excluded排除目标服务名
discover.included包括目标服务名
routes是一个 Map<String, DocDocket> 结构,用于配置文档路由(即,手动配置文档)

discover 配置,会自动生成服务相关的 DocDocket 及对应的 upstream,其中服务名会成为 upstream.service 和 upstream.contextPath,uriPattern 会生成 upstream.uri。

  • discover,只会发现有请求到的服务(即,LoadBalance.get(name) 触发到的服务)
  • 没有触发到的服务,可以通过 “included” 进行配置

4、聚合示例

(1)模块服务 app-api (当它是 22 个服务中的某个了)
solon.app:namespace: testgroup: demoname: app-apisolon.cloud.nacos:server: "127.0.0.1:8848"   #nacos服务地址solon.docs: #配置本地文档接口服务routes:default:  #使用固定文档组名(更方便聚合)groupName: "app端接口"apis: - basePackage: "com.demo.controller.app"
(2)文档网关服务 doc-gateway (有两种配置方式)

使用发现服务配置(这个简单,可自动和批量)

solon.app:namespace: testgroup: demoname: doc-gatewaysolon.cloud.nacos:server: "127.0.0.1:8848"   #nacos服务地址solon.docs:discover:uriPattern: "swagger/v2?group=default"included: - "app-api" #具体的功能服务名

或者,手动本置(routes, discover 配置,也可以同时使用)

solon.app:namespace: testgroup: demoname: doc-gatewaysolon.cloud.nacos:server: "127.0.0.1:8848"   #nacos服务地址solon.docs:routes:appApi:                 # doc group-idgroupName: "app端接口" # doc group-nameupstream: service: "app-api"  #使用具体地址,或使用服务名contextPath: "/app-api" #可选(没有时,根据 service 自动生成)uri: "swagger/v2?group=default"

更多内容,可参考 Solon 官网。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt编程技巧小知识点(2)GPIB缓存区数据读取
  • 快递批量查询有什么软件安利一下
  • 关于手机中的红外遥控
  • leetcode hot 100(1)
  • 多尺度病理图像纹理特征作为肺腺癌预后预测的新指标|文献精读·24-08-09
  • 【vue2】回车发送,Ctrl+回车换行,shift+回车换行禁用
  • 【动态规划】1、不同路径II+2、三角形最小路径和
  • sql注入靶场sqli-labs常见sql注入漏洞详解
  • overleaf上latex表格的使用,latex绘制三线表
  • 【OpenCV-Python实战项目】08-YOLO-V3实时目标检测
  • java面试题:简化URL
  • SqlServer 按时间-日期自动分表
  • 【人工智能】人工智能可解释性和透明度的详细探讨
  • C# 串口通讯怎么防止数据丢失
  • C语言:设计模式
  • __proto__ 和 prototype的关系
  • 2017前端实习生面试总结
  • Angularjs之国际化
  • Cookie 在前端中的实践
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Golang-长连接-状态推送
  • laravel 用artisan创建自己的模板
  • leetcode386. Lexicographical Numbers
  • PHP的Ev教程三(Periodic watcher)
  • Vue2 SSR 的优化之旅
  • 程序员最讨厌的9句话,你可有补充?
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端_面试
  • 事件委托的小应用
  • 我建了一个叫Hello World的项目
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #{}和${}的区别?
  • #微信小程序(布局、渲染层基础知识)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2)nginx 安装、启停
  • (23)Linux的软硬连接
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (day6) 319. 灯泡开关
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (黑马C++)L06 重载与继承
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (一) storm的集群安装与配置
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (原)本想说脏话,奈何已放下
  • (转)EOS中账户、钱包和密钥的关系
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ***原理与防范
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net core Redis 使用有序集合实现延迟队列