1. 程式人生 > 其它 >Springcloud的服務呼叫---OpenFeign

Springcloud的服務呼叫---OpenFeign

技術標籤:SpringcloudOpenFeign

目錄:
1.OpenFeign
	1.1建立feign模組
	1.2超時控制
	1.3日誌列印

一,簡單介紹一下服務呼叫

服務呼叫,指的是註冊到服務端上的客戶端之間資料的相互呼叫問題。

 spring-cloud呼叫服務有兩種方式,一種是	Ribbon+RestTemplate, 另外一種是Feign。
 
服務降級,指的是當伺服器壓力劇增時,根據當前業務情況及流量對一些服務和頁面有策略的降級,
以此釋放伺服器資源以保證核心任務的正常執行。

二,OpenFeign

1.建立feign模組
首先,新建一個消費者募模組.feign自帶負載均衡配置,所以不用手動配置.

然後,建立cloud-consumer-feign-order80
在這裡插入圖片描述

 1.1.引入依賴
 <dependencies>
    <!-- Open Feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- eureka Client --
> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency><!-- 引入自己定義的api通用包,可以使用Payment支付Entity --> <groupId>com.
krisswen.cloud</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
 1.2編寫配置檔案
 server:
  port: 80
spring:
  application:
    name: cloud-consumer-feign-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
 1.3編寫啟動類
@SpringBootApplication
@EnableFeignClients //開啟使用feign客戶端的功能
public class CustomerFeignMain80 {
    public static void main(String[] args) {
        SpringApplication.run(CustomerFeignMain80.class,args);
    }
}
 1.4編寫grign客戶端
@FeignClient(value = "cloud-payment-service") //標識當前介面就是一個feign客戶端,並且指定呼叫哪一個微服務
public interface PaymentFeignService {
    @GetMapping("payment/{id}")
    public CommonResult<Payment> findPaymentById(@PathVariable("id") Long id);
}
 1.5編寫controller層
 @RestController
public class CustomerFeignController {

    @Autowired
    PaymentFeignService paymentFeignService;

    @GetMapping("consumer/feign/payment/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
        return paymentFeignService.getPaymentById(id);
    }
}
//localhost/consumer/feign/payment/1
 1.6.測試結果
分別啟動 兩臺eureka 7001  7002
兩臺服務提供方 8001 8002
啟動feign客戶端  cloud-consumer-feign-order80
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20210120082738315.JPG#pic_center)

1.7.最終的目錄為下圖所示:
在這裡插入圖片描述

2.超時控制
2.1在提供方新增模擬服務超時的方法用來測試
設定需要響應的時間

  @GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut(){
    try {
        TimeUnit.SECONDS.sleep(3);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "time out.....";
}

2.2在feign客戶端中定義超時方法

@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut();

2.3.在controller中定義

@GetMapping("consumer/feign/timeout")
public String timeout(){
    //openfeign呼叫服務,預設等待時間是1秒鐘
    return paymentFeignService.paymentFeignTimeOut();
}

2.4.進行測試,通過Feign客戶端進行訪問

2.4.1.首先我們直接訪問服務中的paymentFeignTimeOut方法
2.4.2.然後我們直接訪問feign客戶端類訪問

2.5.設定避免超時呼叫

feign:
  client:
    config:
      default:
        readTimeout: 5000
        connectTimeout: 5000
ribbon: #設定Feign客戶端呼叫超時時間
  ReadTimeOut: 5000 #指的是建立連線所需要的的時間
  ConnectTimeOut: 5000 #指的是建立連線之後,伺服器讀取資源需要的時間

3.日誌列印
 Feign提供了日誌列印功能,我們可以通過配置來調整日誌級別,從而瞭解Feign中Http的請求細節,就是對Feign介面的呼叫情況進行監控和輸出。
3.1.自定義配置類

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

3.2定義配置檔案的日誌配置內容

logging:
  level:
    com.kriss.service.PaymentFeignService: debug

3.3測試結果,檢視我們的列印資訊