首先想先说1w个CNM,坑的自己外焦里嫩。但是功夫不负有心人,终于微服务的基础框架达成了。

一、搭建思路

      之前一直用springBoot,上手springCloud还是很快的。实际也就是把springBoot拆成多个项目,然后其他项目通过model或jar引入的方式。我这里的思路:

clouddata:常量、统一出参对象、dto、vo

eureka:服务注册中心

commonservice:通用服务(有其他服务实际就是复制这个项目,改改)

web:测试调用(也可以作为统一接口层)

springcloud微服务(eureka + openFeign)

二、搭建过程

这里我就不细说了,有人写的很详细的了,我这里是参考博友的:

https://blog.csdn.net/qq_37511501/article/details/94402282

网上说服务提供方也是调用方,所以服务提供方有的也引入了openFeign的支持。我这里是暂时没有这样处理,主要还是怕自己糊了,所以先规矩搭建。

三、遇到的坑

我这里通用服务单独跑是正常的,依然是可以使用url请求的。web调用也正常,能进通用服务的实现类。唯一的问题就是web里用统一出参对象接收不了,一直报json转换器的问题。

springcloud微服务(eureka + openFeign)

于是:

1、各种加Configuration,使劲折腾了半天configureMessageConverters,都失败,报错依然

springcloud微服务(eureka + openFeign)

2、怀疑不能使用Result<?>接收,改成指定对象,依然失败

springcloud微服务(eureka + openFeign)

3、怀疑序列化,修改result统一出参对象实现序列化

springcloud微服务(eureka + openFeign)

最后,使用翻译插件,对报错上面的一段话翻译(警告WARN)

springcloud微服务(eureka + openFeign)

警告说我的统一出参对象的code转换失败,于是再细看统一出参,一行行过(这里其实已经说明了setCode方法),终于发现里面setCode方法有2个,有一个是传枚举ResultCode对象设置code。你不是说基础对象jackson转换失败吗,好,我就去掉这个枚举对象setCode方法,修改业务调用都只能传int。重新编译,启动服务注册、启动服务、启动调用测试。postman调用测试,终于熟悉的返回出现了。

springcloud微服务(eureka + openFeign)

我这个问题看似报的Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.codec.DecodeException: Could not extract response: no suitable HttpMessageConverter found for response type 

实际上不是转换器的问题,就是统一出参里使用了枚举对象的问题。转换爆出来的仅仅是警告被我忽略了,以后要注意,不要轻易放过任何一个细节。

 

 

相关文章: