实际开发中,Feign的开发模式是怎样的?

来源:6-4 【总结与作业】关于微服务调用的介绍及作业

windforce1989

2019-02-18

老师好:
这一节的内容,以及我之前看过的讲feign入门相关的文章。 我看基本上示例的微服务provider的程序和客户端服务调用的程序都是作者一个人写的,自己当然清楚接口的路径,以及请求、返回的类型格式等等。
那么,工作上实际的微服务开发模式是怎么样的呢? 我想,肯定有不少场景,我们是要调用别人的服务吧,如果都要靠人工去问怎么调用,沟通成本未免很大(特别是可能调用不在一起办公的同事的服务),即使有API文档,如果有更新的需求的话,改起来也很麻烦。不仅服务提供方要修改,调用方也要跟着修改。
我看老师在别的回答中提到过SDK。 那么,实际项目开发上关于feign的用法,是不是一般是由服务provider的开发者同时提供一个SDK,里面封装好feignclient,然后把这个SDK打成jar,放到内网私服上?
如果这样的话,下面这种项目层次结构合适么?

demo-project
	demo-common
	demo-service
	demo-sdk

其中demo-service是具体的服务provider程序,实现业务功能。 demo-sdk中封装好feignclient,使用者只要引用这个jar包,就可以直接用了

老师你在那个回答中还提到,诸如请求、相应的类最好不要写在整个大项目公用的common模块中,因为这些对象只是特定的微服务project需要,对于别的项目没必要。
如图上所示,demo-sdk中用到的请求、返回类,在主体服务demo-servcice也会用。 那可不可以再做一个当前项目下的demo-common模块,里面包含这些当前项目公用的类,以及一些别的工具类等等,让demo-sdk依赖demo-common, 这样会不会显得多余?

写回答

1回答

张勤一

2019-02-18

同学你好:

    首先非常感谢你的问题,这个问题非常具体,也非常好!我来解释下你这里提出的三个问题:

    1. 不同的开发人员提供的微服务(通过 Feign 调用的场景),通常是应该包含文档的,而且提供给其他服务调用的应该是一个 SDK。这个 SDK 里面只包含两类内容:第一类是请求和响应对象(这样调用方和被调用方都可以引入直接用);第二类是封装好的 FeignClient(正如你所说的,实际上就是这样用的);

    2. 我们在开发一个微服务的时候,一般会有三个包,分别是:

           XXX-microservice(对外提供接口,即只定义 Controller),XXX-service (service 层,即服务功能实现层),XXX-sdk (请求对象和响应对象定义,FeignClient 定义)

    3. 如果多个微服务模块都会用到同一份代码定义,那么,是可以抽象出来放到 common 中的,这是非常合理的,也是经常采用的方式。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持! 



9
0

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2136 学习 · 927 问题

查看课程