1. 程式人生 > 程式設計 >spring cloud 2.x版本 Feign服務發現教程(內含整合Hystrix熔斷機制)

spring cloud 2.x版本 Feign服務發現教程(內含整合Hystrix熔斷機制)

前言

本文采用Spring cloud本文為2.1.8RELEASE,version=Greenwich.SR3

本文基於前兩篇文章eureka-server和eureka-client的實現。 參考

建立Feign工程

1.1 建立sping boot工程:eureka-feign

1.2 新增pom.xml相關依賴

<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> 複製程式碼

1.3 application新增配置資訊

spring:
  application:
    name: eureka-feign

server:
  port: 8601

eureka:
  instance:
hostname: localhost lease-renewal-interval-in-seconds: 5 lease-expiration-duration-in-seconds: 10 client: service-url: defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/ 複製程式碼

1.4 啟動類EurekaFeignApplication增加註解

package
spring.cloud.demo.eurekafeign; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.cloud.openfeign.EnableFeignClients; @EnableDiscoveryClient @EnableFeignClients @SpringBootApplication public class EurekaFeignApplication { public static void main(String[] args) { SpringApplication.run(EurekaFeignApplication.class,args); } } 複製程式碼

@EnableDiscoveryClient:這裡使用EnableDiscoveryClient註解,在eureka-client已說明,這邊就不在闡述

@EnableFeignClients:啟用Feign客戶端

1.5 建立服務介面EurekaFeignService

package spring.cloud.demo.eurekafeign.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @auther: maomao
 * @DateT: 2019-09-17
 */
@FeignClient(value = "eureka-client")
public interface EurekaFeignService {

    @RequestMapping(value = "/info")
    String syaHello();
}
複製程式碼

@FeignClient:定義Feign客戶端,呼叫遠端client。eureka-client代表client的spring.application.name,呼叫遠端地址示例:http://eureka-client/info

1.6 建立EurekaFeignController控制類

package spring.cloud.demo.eurekafeign.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import spring.cloud.demo.eurekafeign.service.EurekaFeignService;

import javax.annotation.Resource;

/**
 * @auther: maomao
 * @DateT: 2019-09-17
 */
@RestController
@RequestMapping("/feign")
public class EurekaFeignController {

    @Resource
    private EurekaFeignService eurekaFeignService;

    @RequestMapping("/sayHello")
    public String sayHello() {
        return "feign result: " + eurekaFeignService.syaHello();
    }

}
複製程式碼

1.7 啟動eureka-feign服務

可以在eureka-server服務註冊中心看到eureka-feign是否註冊成功。

紅框中內容代表eureka-feign已經正常啟動併成功註冊到eureka-server服務註冊中心。

訪問http://localhost:8601/feign/sayHello,顯示如下:

多重新整理幾次可以在瀏覽器中看到不通的結果,埠是變化的。

Feign預設的負載均衡策略是輪詢方式。如果想修改Feign的負載均衡策略請參考eureka-ribbon中的配置

至此,一個簡單的單機Feign服務消費者工程就搭建完成了。

彩蛋

Feign整合Hystrix熔斷機制

pom.xml增加依賴

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
複製程式碼

增加application.yml配置

feign:
  hystrix:
    enabled: true
複製程式碼

修改EurekaFeignService

在@FeignClient註解中增加fallback

package spring.cloud.demo.eurekafeign.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @auther: maomao
 * @DateT: 2019-09-17
 */
@FeignClient(value = "eureka-client",fallback = EurekaFeignServiceFailure.class)
public interface EurekaFeignService {

    @RequestMapping(value = "/info")
    String syaHello();
}
複製程式碼

增加EurekaFeignServiceFailure類:

package spring.cloud.demo.eurekafeign.service;

import org.springframework.stereotype.Service;

/**
 * @auther: maomao
 * @DateT: 2019-09-17
 */
@Service
public class EurekaFeignServiceFailure implements EurekaFeignService {
    @Override
    public String syaHello() {
        return "網路繁忙,請稍後在試";
    }
}
複製程式碼

啟動eureka-feign服務

首先在eureka-client全不啟動的情況,訪問http://localhost:8601/feign/sayHello看是否全不正常,然後停掉其中一個eureka-client,在多次重新整理http://localhost:8601/feign/sayHello,顯示如下:

說明增加的Hystrix已經生效。

至此,Feign整合Hystrix熔斷機制全部完成。

總結

本文主要簡單實現了feign作為服務消費的簡單應用和Hystrix的整合。

程式碼地址

gitHub地址


《Srping Cloud 2.X小白教程》目錄

轉載請註明出處,