当前位置: 首页 > 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 官网。

http://www.lryc.cn/news/418591.html

相关文章:

  • 多尺度病理图像纹理特征作为肺腺癌预后预测的新指标|文献精读·24-08-09
  • RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现
  • JupyterNotebook添加Anaconda中已有的虚拟环境
  • 利用vscode-icons-js在Vue3项目中实现文件图标展示
  • 某赛通电子文档安全管理系统 CDGAuthoriseTempletService1 SQL注入漏洞复现(XVE-2024-19611)
  • 做个一套C#面试题
  • 【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点
  • YARN单机和集群环境部署教程
  • Android SurfaceFlinger——Vsync信号发送(五十二)
  • 零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页
  • YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式
  • 论文解读(15)-UrbanGPT
  • 大数据湖体系规划与建设方案(51页PPT)
  • 8月最新ChatGPT系统源码SparkAi系统,支持AI换脸+智能体GPTs应用+AI绘画+AI视频+文档分析
  • Linux知识复习第3期
  • 【独家原创】基于NRBO-Transformer多特征分类预测【24年新算法】 (多输入单输出)Matlab代码
  • Debezium日常分享系列之:Debezium 3.0.0.Alpha2 Released
  • SumatraPDF暗黑模式以及如何还原快捷键
  • LeetCode Medium|【300. 最长递增子序列】
  • jenkins自动化构建docker镜像并上传至harbor仓库
  • Java高级Day23-HashMap
  • 【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)
  • Spring boot tomcat使用自定义线程池监控线程数量告警
  • K8S子节点加入主节点访问MaterAPI报错:Unauthorized 401
  • C++ Poco服务端框架中JSON的使用
  • leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝
  • 赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!
  • Nacos-配置中心
  • ava中的文件操作、IO流、递归和字符集
  • 生成式人工智能安全评估体系构建