Feign的介紹和使用

1、Feign的簡介

  Feign是一個聲明式 WebService 客戶端,使用Feign可以讓編寫Web Service 客戶端更加簡單,它的使用方法是定義一個接口,而後在上面添加註解,同時也支持JAX-RS標準的註解。Feign也支持可插拔式的編碼器和解碼器。web

  Spring Cloud 對 Fiegn 進行了封裝,使其支持了Spring MVC 標準註解和HttpMessageConverts。Feign能夠與Eureka和Ribbon組合使用以支持負載均衡。spring

  前面使用Ribbon+RestTemplate時,利用RestTemplate對http請求的封裝處理,造成了一套模版化的調用方法,可是在實際的開發中,因爲對服務依賴的調用可能不止一處。每每一個接口會被多處調用,因此一般會對每一個微服務自行封裝一些客戶端類來包裝依賴服務的調用,因此Feign在此基礎上作了進一步封裝,有他來幫助咱們自定義和實現依賴服務接口的定義,在Feign的實現下,咱們只須要建立一個接口並使用註解的方式來配置他(之前是Dao接口上面標註Mapper註解,如今是一個微服務接口上面標註一個Feign註解便可),便可完成服務提供放的接口綁定,簡化了使用Spring Cloud Ribbon時,自動封裝服務調用客戶端的開發量。api

 

 2、工程配置

新建一個消費者項目(Feign):microservicecloud-consumer-dept-feign瀏覽器

(1)添加pom.xml中的依賴app

 <dependencies>
        <dependency><!-- 本身定義的api -->
            <groupId>com.yufeng.springcloud</groupId>
            <artifactId>microservicecloud-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <!-- Ribbon相關 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 修改後當即生效,熱部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>

(2)在service包下增長  FeignConsumerService 接口,並增長@FeignCilent負載均衡

@FeignClient(value = "microservicecloud-dept") public interface FeignConsumerService { @RequestMapping(value = "/dept/add", method = RequestMethod.POST) public boolean add(@RequestBody Dept dept); @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET) public Dept get(@PathVariable("id") Long id); @RequestMapping(value = "/dept/get/list", method = RequestMethod.GET) public List<Dept> list(); }

說明:@FeignClient的value值指明對哪一個微服務進行負載均衡spring-boot

@RequestMapping 是Spring提供的註解,這裏能夠直接使用之前使用SpringMVC時用過的各類註解,惟一不一樣的是,這裏只是把註解用在了接口上。

(3)在主啓動類中增長 @EnableFeignClients 註解微服務

@SpringBootApplication @EnableEurekaClient @EnableFeignClients public class DeptConsumer80_Feign_App { public static void main(String[] args) { SpringApplication.run(DeptConsumer80_Feign_App.class, args); } }

 

(4)在controller包下增長 DeptController ,使用@Autowired直接注入上面定義的 FeignConsumerService接口對應的實例編碼

@RestController public class DeptController { @Autowired private FeignConsumerService feignConsumerService; @RequestMapping(value = "/consumer/dept/get/{id}", method = RequestMethod.GET) public Dept get(@PathVariable("id") Long id) { return feignConsumerService.get(id); } @RequestMapping(value = "/consumer/dept/get/list", method = RequestMethod.GET) public List<Dept> list() { return feignConsumerService.list(); } }

 (5)結果驗證:啓動eureka集羣,啓動3個生產者服務,啓動本服務;spa

在瀏覽器中打開:http://localhost/consumer/dept/get/1,能夠看到輪詢調用了3個生產者服務;

相關文章
相關標籤/搜索