SpringCloud服務消費者-openFeign元件

大鬍子哈噔發表於2020-12-26

作用·:spring cloud提供了一個基礎元件方便不同服務之間的HTTP呼叫,那就是openFeign openFeign預設是整合了Ribbon,預設實現了負載均衡
呼叫介面的程式碼流程只有兩步:建立介面並且註解:
下面是對pom檔案的分析:


<dependencies> <!--同時也是一個client端 需要對其引入pom-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <!--依賴openfeign pom檔案申明-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!--eureka整合了hystrix 所以必須對其進行引入-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
    </dependencies>

下面是對application.yml檔案的解讀:

server:
  port: 8090

spring:
  application:
    name: openFeign 

eureka:
  client:
    service-url:
      defaultZone:  http://127.0.0.1:8082/eureka/

啟動類的程式碼解讀:

@SpringCloudApplication
@EnableFeignClients		//標明這個註解,是表示這個模組是需要呼叫其他模組的介面的
@EnableHystrixDashboard //代表開啟了dashboard介面檢視熔斷
public class ApplcationFeign {

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

具體程式碼的呼叫類:

@FeignClient(value = "eurekaclient", fallback = ApiServiceError.class)  // 其中value屬性是指屬性那個application.name 名稱
public interface ApiService {

    @RequestMapping(value = "hello", method = RequestMethod.GET)    //這裡是對應了具體的介面路徑,需要到原模組中去尋找
    String test();
}

同時我們需要注意的一點就是它是整合了ribbon是可以負載均衡的
程式碼流程如下:
實現介面的class中的內容如下:

@Component
public class ApiServiceError implements ApiService {

    @Override
    public String test() {
        return "伺服器發生故障";
    }
}

第二步就是:

@FeignClient(value = "eurekaclient", fallback = ApiServiceError.class)  // 其中value屬性是指屬性那個application.name 名稱,其中fallback屬性就是出現異常情況之後需要返回
public interface ApiService {

    @RequestMapping(value = "hello", method = RequestMethod.GET)    //這裡是對應了具體的介面路徑,需要到原模組中去尋找
    String test();
}

我們在知道了熔斷器的使用之後,同時可以新增一個功能就是熔斷器的監控功能
如下是對openFeign模組的pom檔案改造:主要就是新增了兩個pom包:

<!--需要使用到web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--使用dashboard介面檢視熔斷-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>

然後在啟動類上面需要新增註解:

@SpringCloudApplication
@EnableFeignClients //標明這個註解,是表示這個模組是需要呼叫其他模組的介面的
@EnableHystrixDashboard //代表開啟了dashboard介面檢視熔斷
public class ApplcationFeign {

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

    /**
     * 將HystrixMetricsStreamServlet注入到spring容器中去,交給它管理
     * @return
     */
    @Bean
    public ServletRegistrationBean getServlcet(){
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet );
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

啟動成功之後可以訪問如下地址:http://localhost:8081/hystrix

相關文章