SpringCloud-day07-Feign

7.Feign

7.1.Feign简介

声明式服务调用Feign简单介绍下;java

Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。咱们只须要使用Feign来建立一个接口并用注解来配置它既可完成。web

它具有可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。spring

Spring Cloud为Feign增长了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。服务器

这里说下实际使用,前面Ribbon调用服务提供者,咱们经过restTemplate调用,缺点是,多个地方调用,同一个请求要写屡次,不方便统一维护,app

这时候Feign来了,就直接把请求统一搞一个service做为FeignClient,而后其余调用Controller须要用到的,直接注入service,直接调用service方法便可;负载均衡

同时Feign整合了Ribbon和Eureka,因此要配置负载均衡的话,直接配置Ribbon便可,无其余特殊地方;ide

固然Fiegn也整合了服务容错保护,断路器Hystrix,后面再说。学习

 

7.2.Feign实战应用

  第一步:在common项目里建一个service(实际项目中是多个service)做为Feign客户端,用Feign客户端来调用服务器提供者,固然能够配置负载均衡;测试

  Feign客户端定义的目的,就是为了方便给其余项目调用;  编码

修改 microservice-common

pom.xml引入Feign依赖:

        <!-- feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

在common中创建TicketClientService接口:

 1 package com.wfd360.service;
 2 
 3 import com.wfd360.model.Ticket;
 4 import org.springframework.cloud.netflix.feign.FeignClient;
 5 import org.springframework.web.bind.annotation.GetMapping;
 6 import org.springframework.web.bind.annotation.PathVariable;
 7 import org.springframework.web.bind.annotation.PostMapping;
 8 
 9 import java.util.List;
10 
11 /**
12  * Created by 姿式帝-博客园 on 2019/3/29.
13  * 欢迎添加笔者wx(851298348)共同探讨、学习!
14  */
15 
16 /**
17  * feign客户端接口
18  */
19 @FeignClient(value = "MICROSERVICE-TICKET") //调用的服务名称
20 public interface TicketClientService {
21     /**
22      * 根据id查询车票信息
23      *
24      * @param id
25      * @return
26      */
27     @GetMapping(value = "/ticket/get/{id}")
28     public Ticket get(@PathVariable("id") Integer id);
29 
30     /**
31      * 查询车票信息
32      *
33      * @return
34      */
35     @GetMapping(value = "/ticket/list")
36     public List<Ticket> list();
37 
38     /**
39      * 添加或者修改车票信息
40      *
41      * @param ticket
42      * @return
43      */
44     @PostMapping(value = "/ticket/save")
45     public boolean save(Ticket ticket);
46 
47     /**
48      * 根据id删除车票信息
49      *
50      * @return
51      */
52     @GetMapping(value = "/ticket/delete/{id}")
53     public boolean delete(@PathVariable("id") Integer id);
54 }
View Code

 

 

  第二步:为了避免影响以前的ribbon消费者,咱们在这里从新创建一个基于Feign消费者项目,本质上与ribbon的消费者同样的;

  参考microservice-student-consumer-80建一个microservice-student-consumer-feign-80

  代码都复制一份,包括pom.xml,pom.xml里加下 feign依赖,和第一步同样;

 

  第三步:加注解,启动加个注解@EnableFeignClients,支持下Feign;

  重点注意:要注释掉@EnableEurekaClient

  

 

  第四步:修改Contrller,代码以下:

 1 package wfd360.controller;
 2 
 3 import com.wfd360.model.Ticket;
 4 import com.wfd360.service.TicketClientService;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.*;
 8 
 9 import java.util.List;
10 
11 /**
12  * Created by 姿式帝-博客园 on 2019/3/26.
13  * 欢迎添加笔者wx(851298348)共同探讨、学习!
14  */
15 
16 /**
17  * 知识点:@RestController注解至关于@ResponseBody + @Controller合在一块儿的做用。
18  */
19 @Controller
20 @RequestMapping("/ticket")
21 public class TicketConsumerController {
22     @Autowired
23     private TicketClientService ticketClientService;
24 
25     /**
26      * 添加或者修改车票信息
27      *
28      * @param ticket
29      * @return
30      */
31     @PostMapping(value = "/save")
32     @ResponseBody
33     public boolean save(Ticket ticket) {
34 
35         return ticketClientService.save(ticket);
36     }
37 
38     /**
39      * 查询车票信息
40      *
41      * @return
42      */
43     @SuppressWarnings("unchecked")
44     @GetMapping(value = "/list")
45     @ResponseBody
46     public List<Ticket> list() {
47         return ticketClientService.list();
48     }
49 
50     /**
51      * 根据id查询车票信息
52      *
53      * @return
54      */
55     @GetMapping(value = "/get/{id}")
56     @ResponseBody
57     public Ticket get(@PathVariable("id") Integer id) {
58 
59         return ticketClientService.get(id);
60     }
61 
62     /**
63      * 根据id删除车票信息
64      *
65      * @return
66      */
67     @GetMapping(value = "/delete/{id}")
68     @ResponseBody
69     public boolean delete(@PathVariable("id") Integer id) {
70         try {
71             ticketClientService.delete(id);
72             return true;
73         } catch (Exception e) {
74             return false;
75         }
76     }
77 }
View Code

如今用Fiegn,因此把restTemplate去掉,改为注入service,调用service方法来实现服务的调用;

 

  第五步:测试负载均衡

启动3个eureak,在启动3个服务提供者,最后启动 feign消费者,访问

 http://localhost/ticket/list

SpringCloudConfig类的myRule,大伙自行修改测试便可;

 

  Feign实战应用就讲到这里,案例的源码,你们能够下载v7版本!

本站公众号
   欢迎关注本站公众号,获取更多信息