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版本!

本站公眾號
   歡迎關注本站公眾號,獲取更多信息