公司项目目前使用 SOA 架构(Service-oriented architecture:服务导向架构),每个服务作为一个单体对外提供接口,服务之间使用 GitHub OpenFeign 调用接口。
服务提供者正常提供接口,把需要暴露的接口封装为一个 client jar 包,服务调用者正常引入 jar 包,直接调用 jar 方法即可调用服务提供者接口。此文相关代码示例
Provider Api
|
Provider Client
ProviderClientBuilder
|
UserApi
"Content-Type: application/x-www-form-urlencoded") // 请求的编码格式为 application/x-www-form-urlencoded ( |
Consumer Api
引入依赖
<dependency> |
|
"wang.depp") (basePackages = |
ProviderClientBuilder 为配置类,当 Provider 和 Consumer 的 package 路径不同时,需要指定包扫描路径,使引入包配置类在容器启动时就能加载到容器。
application.properties 配置提供方 domain。可通过配置文件为不同环境配置不同的服务提供者 domain
8888 = |
踩过的坑
1、java.lang.IllegalArgumentException: target values must be absolute.
- 读取配置文件的配置出了问题,如:provider-api 的 domain 没写全;或命名错误,没有读取到
2、Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
- **Api 和 Controller 方法的返回值类型对不上,比如:Provider Api 的拦截器给 ApiResponse 又包装了一层 ApiResponse
3、接收参数不能直接为 Date
- 因为使用
application/x-www-form-urlencoded
传输时将参数使用 && 链接到一起,此时可以认为是 String 类型,Date 类型不能接受 String 类型参数