Feign

Feign

简介

  • Feign是声明式的web service客户端,他让微服务之间的调用更加简单了,类似于Controller调用service.SPring Cloud集成了Ribbon和Rureka,可在使用Feign时提供负载均衡的Http客户端。
  • 主要是社区,习惯面向接口编程。这个是很多开发人员的规范.调用微服务访问两种方法。
    1 . 微服务名字 [ribbon]
    2 . 接口好注解 [feign]
  • 前面在使用Ribbon+RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套
    模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,处处一个接口会被多处调用,所以通常都会针对每个微服务自行发呢改装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,有他来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它。即可完成度服务提供方的接口绑定,简化了Spring Cloud Ribbon时,自动发呢改装服务调用客户端的开发量。

使用

修改API接口

    1. 在之前API接口pom.xml添加Feign的依赖
 <!--feign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
    1. 添加Service包,并且添加接口,并与之前服务提供者的controller接口一致,并指定服务名
@FeignClient(value = "provider-person-8001")
public interface PersonService {
    @GetMapping("/person/{id}")
    Person getPersonById(@PathVariable("id") Integer id);
    @GetMapping("/person/getall")
    List<Person> personAll();
    @PostMapping("person/add")
    void addPerson(Person person);
}
    1. 在服务消费者中修改controller
@RestController
public class PersonController {

    @Autowired(required = false) //没注入,编译过不去,不影响使用
    PersonService personService;

    @GetMapping("/person/all")
    public List<Person> getall(){
        return personService.personAll();
    }

    @GetMapping("/person/addpe")
    public Void getall(@RequestParam("name") String name, @RequestParam("age")int age){
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        person.setPerm("user:add");
        personService.addPerson(person);
        return null;
    }

    @GetMapping("person/get/{id}")
    public Person getall(@PathVariable("id") int id){
        return personService.getPersonById(id);
    }
}
    1. 指定扫描的包
@SpringBootApplication
@EnableEurekaClient //为Eureka客户端
@EnableFeignClients(basePackages = {"cn.lzm.springcloud"}) //指定扫描的包
public class PersonConsumerApplication_Feign {
    public static void main(String[] args) {
        SpringApplication.run(PersonConsumerApplication_Feign.class,args);
    }
}
posted @ 2021-01-11 13:59  阿肆啊  阅读(245)  评论(0编辑  收藏  举报