欢迎访问Spring Cloud中国社区

《重新定义Spring Cloud实战》由Spring Cloud中国社区倾力打造,基于Spring Cloud的Finchley.RELEASE版本,本书内容宽度足够广、深度足够深,而且立足于生产实践,直接从生产实践出发,包含大量生产实践的配置。欢迎加微信Software_King进群答疑,国内谁在使用Spring Cloud?欢迎登记

Spring Cloud实战小技巧(解决feign GET传pojo、继承接口方法参数注解等问题)

admin · 5月前 · 3023 ·

1. 项目结构

1.1 config 配置中心

端口:8888,方便起见直接读取配置文件,生产环境可以读取git。application-dev.properties为全局配置。先启动配置中心,所有服务的配置(包括注册中心的地址)均从配置中心读取。

1.2 eureka 注册中心

端口:8761,/metadata端点实现metadata信息配置。

1.3 zuul 网关

端口:8080,演示解析token获得label并放入header往后传递

1.4 core 框架核心包

核心jar包,所有微服务均引用该包,使用AutoConfig实现免配置,模拟生产环境下spring-cloud的使用。

1.5 starter spring cloud以及core框架依赖简化starter

1.6 provider 服务提供者

1.6.1 api 服务提供者SDK

强制服务消费方只能通过服务提供者提供的SDK包(api项目)进行调用,以便更加方便控制服务消费方的行为:
提供可能的优化,SDK直接读取缓存(SDK只读缓存,写缓存放还是在微服务)。
统计有哪些服务消费者,info端点显示包依赖,通过注册中心遍历所有服务。
方便dubbo平滑迁移,接口加feign注解。

1.6.2 service 服务提供者微服务

端口:18090,服务提供者,无特殊逻辑。

1.7 consumer 服务消费者

端口:18090,调用服务提供者。

2 Restful API 设计规范

/版本/访问控制/域对象
/版本/访问控制/域对象/action/动作

2.1 版本

版本为微服务级别,也就是说不存在一个API是v3版,其他API还只是v1版的问题,要升级所有API版本一起升级,但是需要保证之前版本v1-v3还可以使用。
原则上要兼容上一个版本 如果当前是 /v3 则 /v2 要求可以正常使用 /v1 不做要求
如果无法兼容 需要通知所有服务消费者 并约定版本火车 一起上线时间

2.2 小技巧

下面swagger注解就可以实现上述要求,路径中的{version}没有限定,其实可以是任意内容,通过swagger文档来进行约定

// v1版api 即将废弃
@ApiOperation("分页查询")
@RequestMapping(value = "/v1/pb/product", method = RequestMethod.GET)
@Deprecated
List<Product> selectAll(@RequestParam("offset") Integer offset, @RequestParam("limit") Integer limit);

//ProviderApiAutoConfig.CURRENT_VERSION="v2" 用来替换上面的v1版本
@ApiOperation("带过滤条件和排序的分页查询")
@RequestMapping(value = "/{version}/pb/product", method = RequestMethod.GET)
@ApiImplicitParam(name = "version", paramType = "path", allowableValues = ProviderApiAutoConfig.CURRENT_VERSION, required = true)
Response<PageData<Product, Product>> selectAllGet(Page page);

// ProviderApiAutoCo