天天看點

SpringCloud學習筆記(十二、斷路器監控)

前面講解了斷路器, 當資料服務不可用的時候, 斷路器就會發揮作用。

那麼資料服務什麼時候可用,什麼時候不可用,如何監控這個事情呢? 我們就要用到 斷路器監控 來可視化掌控這個情況。

建立監控子項目

建立子項目hystrix-dashboard 。

pom.xml
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>edu.hpu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>hystrix-dashboard</artifactId>

    <name>hystrix-dashboard</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </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.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
    </dependencies>      
斷路器監控啟動類

ProductServiceHystrixDashboardApplication,主要就是這個注解@EnableHystrixDashboard,表示開啟儀表盤功能。

package edu.hpu.springcloud;

import cn.hutool.core.util.NetUtil;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableHystrixDashboard
public class ProductServiceHystrixDashboardApplication {
    public static void main(String[] args) {
        int port = 8020;
        if(!NetUtil.isUsableLocalPort(port)) {
            System.err.printf("端口%d被占用了,無法啟動%n", port );
            System.exit(1);
        }
        new SpringApplicationBuilder(ProductServiceHystrixDashboardApplication.class).properties("server.port=" + port).run(args);

    }
}      
application.yml
spring:
  application:
    name: hystrix-dashboard      
ProductViewServiceFeignApplication

修改視圖微服務,主要是在啟動類中添加注解@EnableCircuitBreaker,使其可以把消息發送給監控中心。

package edu.hpu.springcloud;

import brave.sampler.Sampler;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.NetUtil;
import cn.hutool.core.util.NumberUtil;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;

import java.util.Scanner;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class ProductViewServiceFeignApplication {
    public static void main(String[] args) {
        //判斷 rabiitMQ 是否啟動
        int rabbitMQPort = 5672;
        if(NetUtil.isUsableLocalPort(rabbitMQPort)) {
            System.err.printf("未在端口%d 發現 rabbitMQ服務,請檢查rabbitMQ 是否啟動", rabbitMQPort );
            System.exit(1);
        }
        int port = 0;
        int defaultPort = 8012;
        Future<Integer> future = ThreadUtil.execAsync(() ->{
            int p = 0;
            System.out.println("請于5秒鐘内輸入端口号, 推薦  8012 、 8013  或者  8014,超過5秒将預設使用"+defaultPort);
            Scanner scanner = new Scanner(System.in);
            while(true) {
                String strPort = scanner.nextLine();
                if(!NumberUtil.isInteger(strPort)) {
                    System.err.println("隻能是數字");
                    continue;
                }
                else {
                    p = Convert.toInt(strPort);
                    scanner.close();
                    break;
                }
            }
            return p;
        });
        try{
            port=future.get(5, TimeUnit.SECONDS);
        }
        catch (InterruptedException | ExecutionException | TimeoutException e){
            port = defaultPort;
        }
        if(!NetUtil.isUsableLocalPort(port)) {
            System.err.printf("端口%d被占用了,無法啟動%n", port );
            System.exit(1);
        }
        new SpringApplicationBuilder(ProductViewServiceFeignApplication.class).properties("server.port=" + port).run(args);

    }
    @Bean
    public Sampler defaultSampler() {
        return Sampler.ALWAYS_SAMPLE;
    }
}
      
AccessViewService

這是一個工具類,不停地通路視圖微服務,友善監控。

package edu.hpu.springcloud.util;

import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.http.HttpUtil;

public class AccessViewService {
    public static void main(String[] args) {

        while(true) {
            ThreadUtil.sleep(1000);
            try {
                String html= HttpUtil.get("http://127.0.0.1:8012/products");
                System.out.println("html length:" + html.length());
            }
            catch(Exception e) {
                System.err.println(e.getMessage());
            }

        }

    }
}      

啟動通路:

依次啟動服務中心、配置伺服器、資料微服務、視圖微服務、斷路器監控。

運作通路工具類,以不停通路視圖微服務。

通路位址:

http://localhost:8020/hystrix

這個是監控位址,

SpringCloud學習筆記(十二、斷路器監控)

在第一個輸入框輸入:

http://localhost:8012/actuator/hystrix.stream      

這個位址就是視圖微服務的短路資訊。

然後點選 Monitor Stream 就可以看到監控資訊了。

SpringCloud學習筆記(十二、斷路器監控)

監控圖詳解:

SpringCloud學習筆記(十二、斷路器監控)

結束資料服務:

SpringCloud學習筆記(十二、斷路器監控)

紅色的資料就達到 100%。

問題

1、怎麼結束服務?

上面一步操作是結束資料服務,我用的辦法是先查端口,再在任務管理器中結束程序,這種方式太笨重,查了一下,沒有找到特别理想的結果。

看參考【3】吧。

參考:

【1】、

http://how2j.cn/k/springcloud/springcloud-dashboard/2043.html#nowhere

【2】、

https://wangsong.blog.csdn.net/article/details/78224483

【3】、

http://www.itmuch.com/spring-cloud-sum/how-to-unregister-service-in-eureka/

繼續閱讀