天天看點

SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試

OpenFeign服務接口調用

  • 一、OpenFeign
  • 二、cloud-consumer-feign-order80
  • 三、測試
    • 3.1 測試負載均衡
    • 3.2 測試逾時控制

一、OpenFeign

Feign是一個聲明式的Web Service用戶端。它的出現使開發Web Service用戶端變得很簡單。使用Feign隻需要建立一個接口加上對應的注解,比如:@FeignClient注解。

Feign有可插拔的注解,包括@Feign注解和JAX-RS注解。Feign也支援編碼器和解碼器,Spring Cloud Open Feign對Feign進行增強支援Spring MVC注解,可以像Spring Web一樣使用HttpMessageConverters等。

Feign是一種聲明式、模闆化的HTTP用戶端。在Spring Cloud中使用Feign,可以做到使用HTTP請求通路遠端服務,就像調用本地方法一樣的,開發者完全感覺不到這是在調用遠端方法,更感覺不到在通路HTTP請求。

功能可插拔的注解支援,包括Feign注解和JAX-RS注解。支援可插拔的HTTP編碼器和解碼器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)。

支援Hystrix和它的Fallback。支援Ribbon的負載均衡。支援HTTP請求和響應的壓縮。

靈活的配置:基于 name 粒度進行配置支援多種用戶端:JDK URLConnection、apache httpclient、okhttp,ribbon)支援日志支援錯誤重試url支援占位符可以不依賴注冊中心獨立運作。

二、cloud-consumer-feign-order80

pom.xml

<!--   引入eureka用戶端     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--  open feign      -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
           

主啟動類OrderFeignMain80

package com.atguigu.springcloud;

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

@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
    public static void main(String[] args) {
        /*Feign是一個聲明式WebService用戶端,使用feign能讓編寫WebService用戶端更加簡單,
        *使用方式-定義一個服務接口然後在上面添加注解
        * Feign可以與Eureka和Ribbon結合使用以支援負載均衡
        */
        SpringApplication.run(OrderFeignMain80.class,args);
    }
}
           

FeignConfig日志輸出級别配置類

package com.atguigu.springcloud.config;

import feign.Logger;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {
    Logger.Level feignLoggerLevel(){
        return  Logger.Level.FULL;
    }
}
           

OrderFeignController

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderFeignController {
    @Autowired
    private PaymentFeignService paymentFeignService;

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
         return paymentFeignService.getPaymentById(id);
    }
    逾時控制
    @GetMapping(value = "/consumer/payment/feign/timeout")
    public String paymentFeignTimeOut(){
        //用戶端預設等待1秒鐘
        return paymentFeignService.paymentFeignTimeOut();
    }
}
           

PaymentFeignService

package com.atguigu.springcloud.service;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE") //8001微服務名稱
//使用方式:微服務調用接口+注解 即->提供方8001微服務調用接口[email protected]
public interface PaymentFeignService {
    //這是8001微服務接口位址
    @GetMapping("/payment/get/{id}")
    CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);

    @GetMapping(value = "/payment/feign/timeout")
    String paymentFeignTimeOut();
}
           

三、測試

依次啟動7001、7002、8001、8002、OrderFeignMain80。

啟動後通路http://eureka7001.com:7001/得到注冊的服務狀況

SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試

3.1 測試負載均衡

通路http://localhost:80/consumer/payment/get/1會輪詢落在8001和8002服務上

SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試
SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試

3.2 測試逾時控制

通路8001,正常通路

SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試

第一次通路http://localhost:80/consumer/payment/feign/timeout,正常

SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試

過幾秒鐘再通路,已經無法通路

SpringCloud H版系列5--OpenFeign服務接口調用一、OpenFeign二、cloud-consumer-feign-order80三、測試