一个开放平台解决方案项目,基于Spring Cloud实现,目标让用户快速搭建自己的开放平台
一些运行手册在这里:
这是我第一次接触 Java 微服务,so 什么样的服务才算微服务呢?
- 单一职责的。一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题(注意是一个业务问题而不是一个接口)。
- 面向服务的。将自己的业务能力封装并对外提供服务,这是继承SOA的核心思想,一个微服务本身也可能使用到其它微服务的能力。
我觉得满足以上两点就可以认为典型的微服务。
SOP采用微服务架构实现,其核心是网关路由,网关启动成后会触发一个事件,这个事件会取拉取微服务中提供的路由信息,大致过程:
- 从nacos中获取微服务实例
- 拿到微服务信息,调用微服务提供的接口拉取路由数据,微服务找到被
@Open
注解的方法,然后封装成一个路由对象,放到List中,最后返回给网关。 - 网关拿到路由信息,经过处理,转化成网关路由配置
路由的存储方式是一个Map,key为路由id,即接口名+版本号。
/icons/chart-alternate_orange.svg
Nacos相关
还有不得不提的文档归纳系统,由于是开放平台,所以必须要能够提供接口的API 文档。但文档应该由各个微服务各自实现,难点是如何归纳各个微服务端提供的文档信息并统一展示。
下图是一个大致的原理图:
SOP的文档归纳思路如下:
- 各微服务使用
swagger
定义自己的接口信息 sop-website
项目在启动时向注册中心获取所有服务实例,分别调用各个服务提供的swagger
文档信息,保存到本地sop-website
前端页面负责展示swagger
提供的文档信息
由于注册中心的存在,可以很方便的获取每个微服务提供的接口,因此可以获取到swagger提供的文档信息。如此一来的好处是,各微服务不用关心文档该怎么展示,只需要写好swagger注解即可;文档信息展示统一交给另外一个工程来维护,各司其职。