springcloud(七): 使用Feign調用Eureka Server客戶端服務


         當我們通過RestTemplate調用其它服務的API時,所需要的參數須在請求的URL中進行拼接,如果參數少的話或許我們還可以忍受,一旦有多個參數的話,這時拼接請求字符串就會效率低下,並且顯得好傻。

那么有沒有更好的解決方案呢?答案是確定的有,Netflix已經為我們提供了一個框架:Feign。

Feign是一個聲明式的Web Service客戶端,它的目的就是讓Web Service調用更加簡單。Feign提供了HTTP請求的模板,通過編寫簡單的接口和插入注解,就可以定義好HTTP請求的參數、格式、地址等信息。

而Feign則會完全代理HTTP請求,我們只需要像調用方法一樣調用它就可以完成服務請求及相關處理。Feign整合了Ribbon和Hystrix(關於Hystrix我們后面再講),可以讓我們不再需要顯式地使用這兩個組件。

總起來說,Feign具有如下特性:

  • 可插拔的注解支持,包括Feign注解和JAX-RS注解;
  • 支持可插拔的HTTP編碼器和解碼器;
  • 支持Hystrix和它的Fallback;
  • 支持Ribbon的負載均衡;
  • 支持HTTP請求和響應的壓縮。

這看起來有點像我們springmvc模式的Controller層的RequestMapping映射。這種模式是我們非常喜歡的。Feign是用@FeignClient來映射服務的。

 

代碼案例如下:

1. 選擇項目類型

 

2.創建類型

 

3.選擇項目中給我們產生的依賴

 

 4.選擇工程名稱和模塊名稱

 

 5.查看項目結構

 

6.編輯pom.xml文件

<dependencies>
        <dependency>
            <groupId>cn.kgc</groupId>
            <artifactId>eureka-common-school</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

 

7.編寫application.properties屬性文件

#eureka的相關配置
#使用feign時報錯Service id not legal hostname(xx_sss)
#原因是feign不支持下划線"_",支持"-",改成xx-sss即可
#spring.application.name表示當前微服務注冊到Eureka Server中的名字,同事需要制定Eureka Server地址
spring.application.name=client-classes-consumer
server.port=8763
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

 

8.在cn.kgc.feign包下創建feign服務調用接口

package cn.kgc.feign;
import cn.kgc.vo.Classes;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
//FeignClient的name屬性值和eureka_client_product的appliaction屬性文件找那個的spring.application.name保持一致
@FeignClient(name="client-school-provider")
public interface ClassesFeign {
    //下面的調用接口標准要和eureka-client-provider中的controller請求方法必須保持一致
    @RequestMapping("/options.do")
    public List<Classes> optionsData();

}

 

9.編寫控制類cn.kgc.controller包下ClassesController

package cn.kgc.controller;

import cn.kgc.feign.ClassesFeign;
import cn.kgc.vo.Classes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class ClassesController {
    @Autowired
    private ClassesFeign classesFeign;

    @RequestMapping("/showoptions.do")
    public List<Classes> showOptionsData(){
        return classesFeign.optionsData();
    }
}

 

10.開啟啟動類feign的注解

package cn.kgc;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientConsumerApplication.class, args);
    }

}

 

11.先啟動,eureka-server服務端,再啟動eureka-client-provider 提供者,再啟動調用者eureka-client-consumer

服務器端檢測到的客戶端注冊信息

 

訪問客戶端提供者的數據

 

 

 

使用feign訪問客戶端提供者的數據

 

 

全部拿到數據了,后續有問題請直接找我:QQ:964918306

 

此帖子為原創

作者:紅酒人生

轉載請注明出處:https://www.cnblogs.com/holly8/p/11016983.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM