如何打造一个Dubbo网关--文档生成

上文我们分析了Maven插件作用,并知道了如何配置插件的各种参数,插件将完成如下几个目标:

  1. 使用Visitor遍历并记录AST
  2. 实现isCompressmakeJson功能
  3. 按接口保存文件并存在于最终生成的client-jar中
  4. 生成所有文件的索引和版本信息,这部分同样要在client-jar中

本篇内容主要讲述ASTNode和ASTVisitor,由于代码量较大只会挑部分说明。以下代码片段全部来自于plume

如何打造一个Dubbo网关--文档插件

文档做为前后端联调的核心是不可或缺的,一个好的文档能降低大量沟通成本

对于Swagger我们也使用过好几年了,调试还可以但是做为联调文档仍然不是那么方便。所以把目标放在了每个Javaer都必须写的一样东西上了:方法注释

对!我们要通过接口的注释来生成API文档,看上去和javadoc有点像,思路也确实来自于javadoc,但是有以下几个问题:

  1. 不支持自定义的注解,如上文提到过的@WhitelistInjection
  2. 对于展示:方法和类在一起,方法和引用的实体是分开的,查看很麻烦
  3. 一般API文档的大致包括这几个:接口说明、入参列表、返回列表。不能说没有,只能说很分散
  4. 生成的文件再次处理很麻烦,展示可以,不能提供给网关使用

本篇内容主要讲述JDTMaven插件。以下代码片段全部来自于plume

如何打造一个Dubbo网关--用户注入

之前也说过微服务架构下,我们通常会收获数个甚至更多的子项目,每个项目独立运行。但是用户还需要登录啊,每个子系统也要获取登录之后用户信息

将登录凭证在子系统中传递,交由子系统单独认证并不是什么好主意:不仅会增加开发复杂度,同时会增加认证服务的压力,还会造成大量浪费。子系统需要的仅仅是用户当前信息的快照

如果某个接口需要用户登录,但是登录凭证失效了、不存在或错误应该在网关直接返回。本篇内容主要讲述注入注解用户注入。以下代码片段全部来自于plume

如何打造一个Dubbo网关--软分组

微服务架构下,一个完整的业务通常是被拆分成数个甚至数十个子项目,每个子项目独立运行,一组人员负责一个或数个子项目

在这种情况下并行开发不可避免,我们假设这么一种情况:red组要做一个需求评估需要改动A、B、C三个项目;blue组也要做一个需求评估需要改动B、C、D三个项目;yellow组也要做一个需求评估需要改动E、F这两个项目。这种情况下B、C项目的发布权限给谁?又如何保证E、F能调用到正确的A、B、C、D的接口呢?

  • 硬分组:所有资源物理隔离,也就是说开多个完整的dev环境,成本太高多数情况下都是不能接受的
  • 软分组:将开发环境进行逻辑分组,完整的dev环境默认是stable分组,再添加red、blue、yellow三个分组,只包含各自要开发的项目

在软分组下,流量进入网关后如果无分组标记则走stable分组,否则按分组标记走。本篇内容主要讲述SPI扩展网关软分组。以下代码片段全部来自于plume

如何打造一个Dubbo网关--泛化调用

我们的网关是基于SpringCloudGateway实现,显然不可能在网关项目中引入所有业务项目的client.jar,更不可能在client.jar变化时重启网关,那要如何实现rpc调用呢?这里就要引入一个Dubbo里的重要功能:泛化调用

所谓的泛化调用就是在调用方没有接口及模型类元的情况,通过已知条件直接构造出接口相关引用来实现rpc调用的一种手段。网关通过泛化调用将内部的Dubbo接口转换成rest形式给前端使用

通过泛化调用可以在不依赖jar的情况下进行rpc调用,本篇内容主要讲述泛化调用接口路由转换。以下代码片段全部来自于plume

如何打造一个Dubbo网关--选型

DubboSpringCloud有什么优缺点?应该如何选型?这里简单对比下:

  • SpringCloud必须在SpringBoot上运行,提供了一套完整的工具链,包括微服务开发中的方方面面
  • DubboSpring容器集成,只包括服务治理和rpc
  • SpringCloud虽然说开箱即用,但是仍然会引入一些必须理解的组件和额外代码
  • SpringCloud的服务端本质上就是一个运行起来的Spring容器,对外提供rest(http+json)服务
  • Dubbo的服务端是一个单独的NettyServer,默认使用dubbo协议和单一tcp
  • Dubbo提供了一套自己的SPI机制可以方便的对常用功能进行扩展

当然两者也不是对立的可以同时使用,毕竟最常见的还是将DubboSpringBoot部署在一起,这其实和SpringCloud部署在一起没有本质区别

Webmagic备份站点静态镜像

有的网站内容很喜欢,但想要一个本地能无障碍访问的镜像怎么办?当然是wget

之前使用的如下,但是文件已存在的时候会出现各种问题,导致每次基本都要重下,对于一个有着巨量图片的站点实在是太难了

wget -r -c -p -np -nc -k -e robots=off -U=Mozilla -P /data/site -N http://$1

Webmagic默认不是干这个的,它是把页面内容抽取成结构化数据存储而不是直接把页面保存完事;不过看下文档也就是重写下PageProcessor和Pipeline的事;依然图样,保存图片还是需要开了线程池去下载

当然这样虽然减少了图片的重复下载,但并没有简单多少,以下仅作为一个记录,因为这个方案很快就放弃了

PSV破解了?这是药丸

大清亡了,PSV居然在一个月前已破解了。现在破解已经比较成熟了,可以模拟最新版登录PSS,大多数游戏也都有dump了

不过怎么看都是药丸;大概不会有新游戏来,不过早就吃灰多年,半死不活了;高性能的手机模拟器啥时候来