一、简介
不同于Ribbon+RestTemplate基于地址来调用微服务,Feign提供类似接口调用的方式来调用微服务,我们只需要创建一个接口并使用注解的方式来配置它(类似于Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解)
二、Feign使用
1、springcloud-api和客户端(消费方)均导入Feign的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
2、在springcloud-api新建一个接口
package com.xxs.springcloud.service;
import com.xxs.springcloud.pojo.Dept;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
@Component
@FeignClient(value = "微服务名")
public interface DeptService {
@GetMapping("/dept/get/{id}")
public Dept queryById(@PathVariable("id") Long id);
@GetMapping("/dept/list")
public List<Dept> queryAll();
@PostMapping("/dept/add/")
public boolean addDept(Dept dept);
}
3、客户端通过@Autowired的方式调用springcloud-api的接口
package com.xxs.springcloud.controller;
import com.xxs.springcloud.pojo.Dept;
import com.xxs.springcloud.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DeptConsumerController2 {
@Autowired
private DeptService service;
@GetMapping("/consumer/dept/get/{id}")
public Dept get(Long id){
return service.queryById(id);
}
@PostMapping("/consumer/dept/add")
public boolean add(Dept dept){
return service.addDept(dept);
}
}
4、客户端的启动类上添加@EnableFeignClients注解
package com.xxs.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.xxs.springcloud") //扫描到springcloud-api的接口
@ComponentScan("com.xxs.springcloud") //扫描自己的包,让所有注解生效
public class DeptConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer_80.class,args);
}
}
本文介绍Feign在Spring Cloud中的应用,通过示例展示如何使用Feign替代Ribbon+RestTemplate实现微服务间的接口调用,提高代码的可读性和维护性。
1174

被折叠的 条评论
为什么被折叠?



