Spring cloud多模块开发下Feign的使用,以及@FeignClient注入bean找不到异常解决

一、关于Feign

在微服务架构开发是,我们常常会在一个项目中调用其他服务,其实使用Spring Cloud Ribbon就能实现这个需求,利用RestTemplate 的请求拦截来实现对依赖服务的接口调用, 但是实际项目中对服务依赖的调用可能不止于 一 处,往往 一 个接口会被多处调用,所以我们通常都会针对各个微服务自行封装 一 些客户端类来包装这些依赖服务的调用。 这个时候我们会发现,由于 RestTemplate 的封装,几乎每 一 个调用都是简单的模板化内容。

Spring Cloud Feign 在此基础上做了进 一 步封装,由它来帮助我们定义和实现依赖服务接口的定义。在 Spring Cloud Feign 的实现下, 我们只需创建 一 个接口并用注解(@FeignClient)的方式来配置它, 即可完成对服务提供方的接口绑定,简化了在使用 Spring Cloud Ribbon 时自行封装服务调用客户端的开发量。

二、多模块方式构建一个Feign项目

1**、准备,**

启动一个Eureka服务注册中心,后面的两个服务都会启动注册到这个上面。

2**、编写第一服务–商品服务**

(1). 创建一个父模块

File–>New–>Project–>Maven

不需要任何勾选,直接填写GAV,然后填写项目名就可以了

因为这是一个父模块,对于创建出来的Maven项目,可以直接删除src文件

(2). 创建子模块common

在父模块上右键`New`–>`Module`,创建一个模块,该模块即为子模块;

同样不选择Create from archetype选项,因为是普通模块,Next;

GroupId 默认父项目的groupId

Version 默认父项目的version

ArtifactId 本模块的名字product-common

然后填写项目名即可common

(3). 同理创建子模块client

在父模块上右键`New`–>`Module`,创建一个子模块;

同样不选择Create from archetype选项,因为是普通模块,Next;

GroupId 默认父项目的groupId

Version 默认父项目的version

ArtifactId 本模块的名字product-client

然后填写项目名即可client

(4). 同理创建子模块server

在父模块上右键`New`–>`Module`,创建一个子模块;

同样不选择Create from archetype选项,因为是普通模块,Next;

GroupId 默认父项目的groupId

Version 默认父项目的version

ArtifactId 本模块的名字product-server

然后填写项目名即可server

(5). 在server模块下编写一个服务接口

例如提供一个**/product/listForOrder****,**这个服务会在下面的订单类中调用

@RestController
@RequestMapping("/product")
public class ProductController {
    @Autowired
    private ProductService productService;

    @PostMapping("/listForOrder")
    public List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList){

???     return productService.findList(productIdList);

    }
}

(6). 在client模块下创建一个接口类

在这个接口类上加注解_@FeignClient(name = “product”)_,其中product是配置的服务在注册中心上的名字

import com.yore.product.common.ProductInfoOutput;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

@FeignClient(name = "product")
public interface ProductClient {

??? @PostMapping("/product/listForOrder")

??? List<ProductInfoOutput> listForOrder(@RequestBody List<String> productIdList);

}

(7). 接此项目提交到Maven仓库

直接可以使用Idea右侧的Maven Projects里的install,打包提交到Maven仓库,或者使用Maven命令:

mvn -Dmaven.test.skip=true -U clean install

(8). 启动项目,将项目注册到注册中心,


启动成功后会在注册中心的UI上看到服务的注册信息

3**、编写第二服务—订单服务**

(1). 同第2.2创建商品项目一样,创建一个订单Maven项目

(2). 在项目中把商品类的client依赖引入项目

(3). 在订单项目的Server模块的应用启动类上添加注解

@SpringBootAppl
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值