turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 turbine来监控集群下hystrix的metrics情况,通过eureka来发现hystrix服务。
turbine
使用官方给定的war 放入tomcat中运行,修改turbine-web-1.0.0/WEB-INF/classes下config.properties文件
turbine-web-1.0.0/WEB-INF/classes
config.properties
turbine.aggregator.clusterConfig=test turbine.ConfigPropertyBasedDiscovery.test.instances=10.0.80.60,10.0.41.13 turbine.instanceUrlSuffix=:8080/configcenter-web/hystrix.stream
turbine.aggregator.clusterConfig配置集群名称
turbine.aggregator.clusterConfig
turbine.ConfigPropertyBasedDiscovery.test.instances配置集群节点ip(用以发现服务,规则不限在ip列表)
turbine.ConfigPropertyBasedDiscovery.test.instances
turbine.instanceUrlSuffix聚合实例访问后缀
turbine.instanceUrlSuffix
重启tomcat后访问http://localhost:${port}/turbine.stream?cluster=test 获取聚合信息
通过EnableTurbine注解启用turbine,需要引入依赖:
EnableTurbine
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-turbine</artifactId> </dependency>
Application.Java
package com.lkl.springcloud.turbine; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.turbine.EnableTurbine; /** * 创建turbine应用 * Created by liaokailin on 16/5/1. */ @SpringBootApplication @EnableTurbine public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } }
对应配置信息
server.port=9090 spring.application.name=turbine turbine.appConfig=node01,node02 turbine.aggregator.clusterConfig= MAIN turbine.clusterNameExpression= metadata['cluster']
turbine.appConfig配置需要聚合的应用turbine.aggregator.clusterConfigturbine需要聚合的集群名称 通过http://localhost:9090/turbine.stream?cluster=MAIN访问turbine.clusterNameExpression获取集群名表达式,这里表示获取元数据中的cluster数据,在node01、node02为配置对应信息
turbine.appConfig
turbine.clusterNameExpression
通过eureka做服务发现与注册
eureka
EurekaServer.java
package com.lkl.springcloud.turbine; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; import org.springframework.context.annotation.Configuration; @Configuration @EnableAutoConfiguration @EnableEurekaServer public class EurekaServer { public static void main(String[] args) { new SpringApplicationBuilder(EurekaServer.class).properties( "spring.config.name:eureka", "logging.level.com.netflix.discovery:OFF") .run(args); } }
对应配置信息 表明为一个独立的eureka服务
server.port=8761 spring.application.name=eureka eureka.client.registerWithEureka=false eureka.client.fetchRegistry=false
需要创建两个节点组成集群,同时向eureka注册服务
Node01.java
package com.lkl.springcloud.turbine; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by liaokailin on 16/5/4. */ @Configuration @EnableAutoConfiguration @EnableDiscoveryClient @EnableCircuitBreaker @RestController public class Node01 { public static void main(String[] args) { new SpringApplicationBuilder(Node01.class).properties( "spring.config.name:node01").run(args); } @Autowired private HelloService service; @RequestMapping("/") public String hello() { return this.service.hello(); } @Component public static class HelloService { @HystrixCommand(fallbackMethod="fallback") public String hello() { return "Hello World"; } public String fallback() { return "Fallback"; } } }
Node01调用hystrix command,对应配置
Node01
hystrix command
server.port= 8081spring.application.name=node01 eureka.instance.hostname=localhost eureka.instance.metadata-map.cluster=MAIN 配置比较简单,需要注意的有eureka.instance.hostname,把Node02展示出来再说明eureka.instance.hostname
server.port= 8081spring.application.name=node01 eureka.instance.hostname=localhost eureka.instance.metadata-map.cluster=MAIN
eureka.instance.hostname
Node02
Node02.java
package com.lkl.springcloud.turbine; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 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.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by liaokailin on 16/5/4. */ @Configuration @EnableAutoConfiguration @EnableDiscoveryClient @EnableCircuitBreaker @RestController public class Node02 { public static void main(String[] args) { new SpringApplicationBuilder(Node02.class).properties( "spring.config.name:node02").run(args); } @Autowired private HelloService service; @RequestMapping("/") public String hello() { return this.service.hello(); } @Component public static class HelloService { @HystrixCommand(fallbackMethod="fallback") public String hello() { return "Hello World"; } public String fallback() { return "Fallback"; } } }
node02.properties
server.port= 8082 spring.application.name=node02 eureka.instance.hostname=mac eureka.instance.metadata-map.cluster=MAIN
两个节点中eureka.instance.hostname不同 查看cat /etc/hosts
cat /etc/hosts
127.0.0.1 mac 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost
实质指向都为127.0.0.1
127.0.0.1
这是由于turbine自身的一个bug,eureka.instance.hostname一致时只能检测到一个节点,因此修改hosts,如果是在不同机器演示时不会出现这样的情况
hosts
note节点默认向http://localhost:8761/eureka/apps注册,不需要单独配置
note
http://localhost:8761/eureka/apps
将所有的应用都启动起来,访问http://localhost:8761/可以发现注册服务
http://localhost:8761/
在http://localhost:8080/hystrix-dashboard-1.4.10/中输入http://localhost:9090/turbine.stream?cluster=MAIN得到监控界面;
http://localhost:8080/hystrix-dashboard-1.4.10/
http://localhost:9090/turbine.stream?cluster=MAIN
访问http://localhost:8081/http://localhost:8082/观察dashboard的变化
http://localhost:8081/
http://localhost:8082/
ok ~ it’s work ! more about ishere
您还没有登录,请您登录后再发表评论
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
铅酸电池失效仿真comsol
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
springboot124中药实验管理系统设计与实现,含有完整的源码和报告文档
解除劳动合同协议书
快速过滤图像融合Matlab代码.rar
强调图像中内核形状(例如直线)的过滤器Matlab代码.rar
在内网linux服务器安装redis 在Linux环境中离线安装Redis是常见的需求,尤其是在内网服务器上,由于无法直接访问公网,我们需要提前下载Redis的源码包并手动安装。下面将详细解释如何进行这一过程。
微信小程序StartKitw_xapp-startkit
座位选择微信小程序版本
机械臂代码_Mechanical_arm
图像分割测试视频river-light.mp4
前端分析-2023071100789
labview源码参考示例,可供参考学习使用
MPC跟踪轨迹圆形(以后轴为基准)
MATLAB代码:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词:电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台:MATLAB+CPLEX gurobi平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是一个电动汽车充电管理和智能小区代理商动态定价的问题,将代理商和车主各自追求利益最大化建模为主从博弈,上层以代理商的充电电价作为优化变量,下层以电动汽车的充电策略作为优化变量,通过优化得出最优电价策略以及动态充电策略,代码出图效果非常好,店主已经对代码进行了深入的加工和处理,出图效果非常好,代码质量非常高,保姆级的注释以及人性化的模块子程序,所有数据均有可靠来源,联系后会直接发您资料,保证您学得会,用的起来,简直是萌新福利
springboot154基于Spring Boot智能无人仓库管理,含有完整的源码和报告文档
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
铅酸电池失效仿真comsol
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
springboot124中药实验管理系统设计与实现,含有完整的源码和报告文档
解除劳动合同协议书
快速过滤图像融合Matlab代码.rar
强调图像中内核形状(例如直线)的过滤器Matlab代码.rar
在内网linux服务器安装redis 在Linux环境中离线安装Redis是常见的需求,尤其是在内网服务器上,由于无法直接访问公网,我们需要提前下载Redis的源码包并手动安装。下面将详细解释如何进行这一过程。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
微信小程序StartKitw_xapp-startkit
座位选择微信小程序版本
机械臂代码_Mechanical_arm
图像分割测试视频river-light.mp4
前端分析-2023071100789
labview源码参考示例,可供参考学习使用
MPC跟踪轨迹圆形(以后轴为基准)
MATLAB代码:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词:电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台:MATLAB+CPLEX gurobi平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是一个电动汽车充电管理和智能小区代理商动态定价的问题,将代理商和车主各自追求利益最大化建模为主从博弈,上层以代理商的充电电价作为优化变量,下层以电动汽车的充电策略作为优化变量,通过优化得出最优电价策略以及动态充电策略,代码出图效果非常好,店主已经对代码进行了深入的加工和处理,出图效果非常好,代码质量非常高,保姆级的注释以及人性化的模块子程序,所有数据均有可靠来源,联系后会直接发您资料,保证您学得会,用的起来,简直是萌新福利
springboot154基于Spring Boot智能无人仓库管理,含有完整的源码和报告文档
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作