服务调用 注册服务内部调用 方法之二 feign

文章目录

  • order服务调用goods服务
  • 版本的特别声明
  • 1.服务提供方goods的改造
    • 1.1 goods拆分成多模块
    • 1.2 依赖
    • 1.3 接口准备
    • 1.4 定义Feign client
    • 1.5 maven install
    • 1.6 启动goods项目
  • 2 order服务的改造
    • 2.1 拆分成多模块
    • 2.2 添加依赖
    • 2.3 启动类加上注解@EnableFeignClients
    • 2.4 使用goodsClient接口
    • 2.5 启动order,验证结果
  • 3.可能碰到的问题
    • 启动order服务报错:Either 'name' or 'value' must be provided in @FeignClient

order服务调用goods服务

版本的特别声明

springcloud迭代比较快,版本很多,用到这个feign组件的时候,报了很多classNotFound错误,都是spring组件版本冲突引起的,所以我被迫统一升级我项目里的springboot版本(2.0.0.M3 ------>2.0.6.RELEASE)和spingcloud版本(Finchley.SR2------->Finchley.RELEASE),之前文件里加的资源仓库可以 删掉了,可能你们在看这篇文章的时候,这个版本早过了,可以在这里查看版本对应关系 (这个对应关系也不一定一点问题没有,慢慢填坑)https://spring.io/projects/spring-cloud
服务调用 注册服务内部调用 方法之二 feign_第1张图片
eureka,goods,order项目:
服务调用 注册服务内部调用 方法之二 feign_第2张图片
其中goods和order项目还必须加上依赖,不然项目根本启动不了:


            org.springframework.boot
            spring-boot-starter-web

1.服务提供方goods的改造

1.1 goods拆分成多模块

服务调用 注册服务内部调用 方法之二 feign_第3张图片
goods服务对外的接口统一放在client里面管理,common放了一些goods和其它服务都用得着的对象,server里写主要代码逻辑

1.2 依赖

goods-server.pom 添加goods-common
服务调用 注册服务内部调用 方法之二 feign_第4张图片
goods-client.pom里添加goods-common和feign
服务调用 注册服务内部调用 方法之二 feign_第5张图片

1.3 接口准备

controller写在server模块里:
服务调用 注册服务内部调用 方法之二 feign_第6张图片
SizeOutput对象写在common里,方便client使用它
服务调用 注册服务内部调用 方法之二 feign_第7张图片

1.4 定义Feign client

在client模块里,写interface GoodsClient,不用实现, @GetMapping(value = “size/getSizes”) 对应的是刚才的controller访问路径
服务调用 注册服务内部调用 方法之二 feign_第8张图片

1.5 maven install

install 整个goods项目:mvn -Dserver.test.skip=true -U clean install ,这样其它项目才能引用到 goods-client模块
服务调用 注册服务内部调用 方法之二 feign_第9张图片

1.6 启动goods项目

http://localhost:8081/size/getSizes
服务调用 注册服务内部调用 方法之二 feign_第10张图片

2 order服务的改造

2.1 拆分成多模块

同样拆成三个模块

三个模块和goods三模块同样的分工。我们在server里调用goods里的 /size/getSizes

2.2 添加依赖

order-server.pom里添加feign和goods-client

		
            org.springframework.cloud
            spring-cloud-starter-openfeign
            
        
        
            com.zc
            goods-client
        

2.3 启动类加上注解@EnableFeignClients

包名是 goods-client 里的
服务调用 注册服务内部调用 方法之二 feign_第11张图片

2.4 使用goodsClient接口

自动注入,红线报错只是因为idea不能分辨而已,不影响功能,就是看起来很难受而已
服务调用 注册服务内部调用 方法之二 feign_第12张图片

2.5 启动order,验证结果

http://localhost:8082/feign/getFromGoods order服务已经成功通过feign获取了goods的提供的数据
服务调用 注册服务内部调用 方法之二 feign_第13张图片
服务调用 注册服务内部调用 方法之二 feign_第14张图片

3.可能碰到的问题

启动order服务报错:Either ‘name’ or ‘value’ must be provided in @FeignClient

启动order服务的时候报了这个错误,原因是goods端的@FeignClient注解没写好
服务调用 注册服务内部调用 方法之二 feign_第15张图片
加上这个:
服务调用 注册服务内部调用 方法之二 feign_第16张图片
重新打包goods,再启动order就好了!

你可能感兴趣的:(spring,cloud)