`

Spring Cloud Hystrix 监控数据聚合 Turbine(Finchley 版)-b2b2c小程序电子商务

阅读更多

在本篇中,我们就来介绍一下另外一个工具:Turbine。

准备工作
在开始使用 Turbine 之前,我们先回顾一下上一篇中实现的架构,如下图所示:

其中,我们构建的内容包括:

 

eureka-server:服务注册中心

eureka-producer:服务提供者

eureka-consumer-hystrix:使用 Feign 和 Hystrix 实现的服务消费者

hystrix-dashboard:用于展示 eureka-consumer-hystrix 服务的 Hystrix 数据

创建 Turbine

下面,我们将在上述架构基础上,引入 Turbine 来对服务的 Hystrix 数据进行聚合展示。 这里我们将分别介绍两种聚合方式。

 

通过 HTTP 收集聚合

创建一个标准的 Spring Boot 工程,命名为:turbine。

 

POM 配置

在 pom.xml 中添加以下依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>

 启动类

在启动类上使用 @EnableTurbine 注解开启 Turbine

@EnableTurbine
@SpringBootApplication
public class TurbineApplication {

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

 配置文件

在 application.yml 加入 Eureka 和 Turbine 的相关配置

spring:
  application:
    name: turbine
server:
  port: 8080
management:
  port: 8081
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7000/eureka/
turbine:
  app-config: eureka-consumer-hystrix
  cluster-name-expression: new String("default")
  combine-host-port: true

 参数说明

 

turbine.app-config 参数指定了需要收集监控信息的服务名;

turbine.cluster-name-expression 参数指定了集群名称为 default,当我们服务数量非常多的时候,可以启动多个 Turbine 服务来构建不同的聚合集群,而该参数可以用来区分这些不同的聚合集群,同时该参数值可以在 Hystrix 仪表盘中用来定位不同的聚合集群,只需要在 Hystrix Stream 的 URL 中通过 cluster 参数来指定;

turbine.combine-host-port 参数设置为 true,可以让同一主机上的服务通过主机名与端口号的组合来进行区分,默认情况下会以 host 来区分不同的服务,这会使得在本地调试的时候,本机上的不同服务聚合成一个服务来统计。

注意:new String(“default”) 这个一定要用 String 来包一下,否则启动的时候会抛出异常:

 

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field ‘default’ cannot be found on object of type ‘com.netflix.appinfo.InstanceInfo’ - maybe not public or not valid?

测试

在完成了上面的内容构建之后,我们来体验一下 Turbine 对集群的监控能力。分别启动

 

eureka-server

eureka-producer

eureka-consumer-hystrix

turbine

hystrix-dashboard

访问 Hystrix Dashboard 并开启对 http://localhost:/8080/turbine.stream 的监控,这时候,我们将看到针对服务 eureka-consumer-hystrix 的聚合监控数据。

以下关于 Turbine Stream 的内容仅适用于 Finchley.RC1 版本。今天尝试一下最新的 Finchley.BUILD-SNAPSHOT 发现 netty 的默认端口已经从 8989 改到 8080,并且需要依赖 spring-cloud-starter-netflix-hystrix,因为目前 BUILD-SNAPSHOT 依旧有 bug 不确定他们会怎么改,我就暂时先不更新了。等到 RC2 release 的时候再来更新一发。

 

创建一个标准的 Spring Boot 工程,命名为:turbine-stream-rabbitmq

 

POM

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-turbine-stream</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

 配置文件

spring:
  application:
    name: turbine-stream-rabbitmq
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7000/eureka/

 启动类

@SpringBootApplication
@EnableTurbinestream
public class TurbineStreamRabbitmqApplication {

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

    @Bean
    public ConfigurableCompositeMessageConverter integrationArgumentResolverMessageConverter(CompositeMessageConverterFactory factory) {
        return new ConfigurableCompositeMessageConverter(factory.getMessageConverterForAllRegistered().getConverters());
    }

}

 改造服务调用者

以之前的 eureka-consumer-hystrix 项目为基础,在 pom.xml 里加入以下依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-hystrix-stream</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

 再在启动类上加上 @EnableHystrix 注解

@EnableHystrix
@EnableFeignClients
@SpringBootApplication
public class EurekaConsumerHystrixApplication {

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

}

 测试

分别启动 eureka-consumer-hystrix、turbine-stream-rabbitmq 这两个项目,然后在 RabbitMQ 的管理后台可以看到,自动创建了一个 Exchange 和 Queue

 

 

看到这还是挺高兴的,但是……

 

当访问了一下 consumer 中的接口后,就开始了艰辛的爬坑路程……

 

遇到的坑

依赖

这个 Turbine Stream 之前应该是叫 Turbine AMQP,当时有个 spring-cloud-starter-turbine-amqp 依赖可以用,里边包装了相关的依赖,但是现在它被 deprecated 了,让用 spring-cloud-starter-netflix-turbine-stream 来代替,这就得靠自己来组合了。而坑主要就出在这里,至于哪些是必须的,哪些是添加了后就出问题的,还有依赖冲突的问题,都得靠自己来搞了。

 

分享到:
评论

相关推荐

    spring-cloud-netflix-hystrix应用

    《深入理解Spring Cloud Netflix Hystrix:构建弹性微服务架构》 在当今的软件开发领域,微服务架构已经成为主流,而Spring Cloud作为Java生态中的微服务解决方案,深受开发者喜爱。其中,Spring Cloud Netflix ...

    跟我学习SpringCloud教程 第十一篇: 断路器监控(Hystrix Dashboard)(Finchley版本)-b2b2c小程序电子商务

    有spring cloud b2b2c电子商务需求的朋友可以加企鹅求求:一零三八七七四六二六 二、准备工作 本文的的来源于第一篇文章的栗子,在它的基础上进行改造。 三、开始改造service-hi 在pom的工程文件引入相应的依赖: ...

    SpringCloud -Hystrix监控面板及数据聚合(Turbine)介绍与使用示例

    要使用 Hystrix Dashboard,首先需要在项目中引入 `spring-cloud-starter-netflix-hystrix-dashboard` 依赖,并在启动类上添加 `@EnableHystrixDashboard` 注解以开启监控功能。配置文件中指定应用名称和监听端口,...

    springcloud hystrix 断路由

    在分布式系统中,服务间的调用异常处理是至关重要的,Spring Cloud Hystrix 就是为了解决这一问题而设计的。Hystrix 是 Netflix 开源的一个延迟和容错库,用于隔离服务间的调用,防止因某个服务的不稳定导致整个系统...

    spring cloud hystrix原理介绍及使用

    Spring Cloud Hystrix是一个由Netflix开源的Java框架,用于在分布式系统中提供延迟和容错功能,特别适用于对微服务架构中的远程过程调用(RPC)进行控制。其核心目标是通过添加一个延迟容忍层来隔离各个微服务之间的...

    springcloud hystrix jar包

    springcloud hystrix jar包,java -jar xx.jar,小熊界面

    spring-cloud-netflix-hystrix-dashboard-2.2.3.RELEASE.jar

    spring-cloud-netflix-hystrix-dashboard-2.2.3.RELEASE.jar

    Spring Boot Spring Cloud B2B2C o2o 分布式 微服务 第四篇:断路器(Hystrix)(Finchley版本)-B2B2C小程序 电子商务

    一、断路器简介 ...有spring cloud b2b2c电子商务需求的朋友可以加企鹅求求:三五三六二四七二五九 二、准备工作 这篇文章基于上一篇文章的工程,首先启动上一篇文章的工程,启动eureka-server 工程;启动servic

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    基于Spring Cloud Finchley SR2 Spring Boot 2.0.7的最新版本。 核心基础项目内实现类自定义的权限注解,配合RBAC权限模型+拦截器即可实现权限的控制,具体的参考项目中的实现。同时也封装了一些顶层类和结果集等。...

    SpringCloud10-2 Hystrix整合Dashboard教程

    1. **依赖添加**:在你的`pom.xml`文件中,需要添加`spring-cloud-starter-netflix-hystrix-dashboard`和`spring-cloud-starter-netflix-turbine`依赖。Turbine是用于聚合多个Hystrix流的组件,这样你就可以在一个...

    springcloud hystrix的使用

    通常,这包括`spring-cloud-starter-netflix-hystrix`和`spring-cloud-starter-netflix-hystrix-dashboard`,后者用于可视化监控。 2. **配置Hystrix**:在`application.yml`或`application.properties`文件中配置...

    spring-cloud-examples

    hystrix-dashboard-turbine:熔断监控Hystrix Dashboard和Turbine的示例 spring-cloud-config-git:配置中心git版本示例 spring-cloud-config-svn-refresh:配置中心svn版本示例,客户端refresh版本示例 spring-...

    hystrix-metrics-event-stream-1.5.18.jar

    hystrix-metrics-event-stream-1.5.18.jarhystrix-metrics-event-stream-1.5.18.jar

    springcloud微服务框架+服务模版

    hystrix-dashboard-turbine:熔断监控Hystrix Dashboard和Turbine的示例 spring-cloud-config-git:配置中心git版本示例 spring-cloud-config-svn-refresh:配置中心svn版本示例,客户端refresh版本示例 spring-...

    基于Spring Cloud(Finchley版本)架构体系

    基于Spring Cloud(Finchley版本)架构体系,整合各微服务基础组件的最新最全的脚手架工程。微服务架构: Spring Cloud全家桶 + Spring ... 全方位监控:Spring Boot Admin 2.x + Turbine + Hystrix Dashboard + Zipkin

    Spring Cloud Netfix Hystrix断路器例子

    Spring Cloud Netfix Hystrix断路器例子工程。使用Spring Cloud Netflix Hystrix以及Spring RestTemplate或Spring Cloud Netflix Feign实现断路器模式。

    springcloud2-hystrix-feign-zuul.zip

    标题 "springcloud2-hystrix-feign-zuul.zip" 提示了我们这是一组关于Spring Cloud 2的实现,具体涉及Hystrix、Feign和Zuul组件的实践项目。Spring Cloud 是一个用于构建分布式系统的服务发现、配置管理和微服务连接...

    spring cloud hystrix &&dashboard源码解读

    ### Spring Cloud Hystrix & Dashboard 源码解读 #### 一、加载、初始化概要 ##### 1.1 @EnableCircuitBreaker 的生效 `@EnableCircuitBreaker` 注解是 Spring Cloud Hystrix 提供的一个关键注解,用于启动熔断器...

    Hystrix-dashboard+turbine-web+说明文档

    本文将详细介绍这两个组件以及如何通过 `Hystrix-dashboard` 和 `turbine-web` 来实现有效的监控和聚合监控。 **Hystrix** 是 Netflix 开源的一个库,它旨在通过隔离请求、降级策略和熔断机制来保护服务免受级联...

Global site tag (gtag.js) - Google Analytics