1. 程式人生 > >SpringCloud hystrix模組的問題與改進,檢視監控介面的使用(五)

SpringCloud hystrix模組的問題與改進,檢視監控介面的使用(五)

springcloud學習總結

5、服務降級,檢視監控介面的使用

一、問題的提出

我們可以看到,在服務提供者方進行服務熔斷之後,一旦呼叫服務方法失敗並丟擲了錯誤資訊後,會自動呼叫@HystrixCommand標註好的fallbackMethod呼叫類中的指定方法。這就使得每一個服務處理的方法都得有一個fallbackMethod方法來處理報錯之後,需要返回的資訊。從而使我們的服務處理類(Controller)變得龐雜而臃腫。怎麼解決這個辦法呢?

二、問題的解決

我麼可以看到,在provider方採取的服務熔斷會使得專案程式碼變得臃腫。從而轉變思路: 在consumer方來採取熔斷機制! 即----服務降級。他是客戶端,與服務端沒有關係

修改api模組,新增類實現FallbackFactory介面,來處理服務呼叫失敗後需要返回的資訊。

package com.atguigu.springcloud.service;

import java.util.List;

import org.springframework.stereotype.Component;

import com.atguigu.springcloud.entities.Dept;

import feign.hystrix.FallbackFactory;

@Component // 不要忘記新增,不要忘記新增  大坑!!!!!!
public class
DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> { @Override public DeptClientService create(Throwable throwable) { return new DeptClientService() { @Override public Dept get(long id) { return new Dept().setDeptno(id).setDname("該ID:" + id + "沒有沒有對應的資訊,Consumer客戶端提供的降級資訊,此刻服務Provider已經關閉"
) .setDb_source("no this database in MySQL"); } @Override public List<Dept> list() { return null; } @Override public boolean add(Dept dept) { return false; } }; } }

注意 @Component 不要忘記新增,不要忘記新增 大坑!!!!!!

修改DeptClientService

package com.atguigu.springcloud.service;
import java.util.List;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.atguigu.springcloud.entities.Dept;
/**
 * 
 * @Description: 修改microservicecloud-api工程,根據已經有的DeptClientService介面

新建

一個實現了FallbackFactory介面的類DeptClientServiceFallbackFactory
 * @date 2018年4月21日
 */
//@FeignClient(value = "MICROSERVICECLOUD-DEPT")
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory=DeptClientServiceFallbackFactory.class)
public interface DeptClientService
{
	@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
	public Dept get(@PathVariable("id") long id);

	@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
	public List<Dept> list();

	@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
	public boolean add(Dept dept);
}

啟動三個註冊中心,兩個提供者與feign模組,測試結果
http://localhost:80/consumer/dept/get/{id}

必要說明:在feign模組的application.yml裡面這段程式碼

feign:
  hystrix:
    enabled: true

為開啟服務降級。

在系統資源不夠的情況下,關閉某些不重要的、訪問量少的服務,而將大量的資源讓給高訪問的服務。

三、服務監控的使用

新建dashboard模組

pom

 <dependencies>
        <!-- 自己定義的api -->
        <dependency>
            <groupId>springcloud</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 修改後立即生效,熱部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!-- Ribbon相關 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- feign相關 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <!-- hystrix和 hystrix-dashboard相關 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
        </dependency>
    </dependencies>

application.yml

server:
  port: 9001

主啟動類

package com.atguigu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableHystrixDashboard
public class DeptConsumer_DashBoard_App
{
	public static void main(String[] args)
	{
		SpringApplication.run(DeptConsumer_DashBoard_App.class, args);
	}
}

修改feign模組

pom增加依賴

	<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

主啟動類增加註解@EnableCircuitBreaker

啟動註冊中心,服務提供者與帶熔斷機制的消費者80,啟動dashboard訪問連線檢視效果

http://localhost:9001/hystrix

下圖為監控80模組的截圖
www
在這裡插入圖片描述

後續:路由閘道器的設定…