无法在 Spring Boot 应用程序中设置 hystrix 仪表板
Posted
技术标签:
【中文标题】无法在 Spring Boot 应用程序中设置 hystrix 仪表板【英文标题】:Unable to setup hystrix dashboard in spring boot application 【发布时间】:2018-12-12 16:44:20 【问题描述】:我正在尝试为我的 java spring boot 应用程序设置一个 hystrix 仪表板。启动应用程序后,我在控制台中收到代理打开消息,但没有任何反应。
Proxy opening connection to: http://localhost:9083/actuator/hystrix.stream
在仪表板中显示正在加载...并且没有显示任何内容...请参阅底部附加的图片。
此外,当我在浏览器中点击此 url http://localhost:9083/actuator/hystrix.stream 时,不会显示任何数据,只是不断的空 ping。喜欢 平: 平: 平: ...
我所做的代码更改是
@RequestMapping(value = "/elasticsearch/numberOfInstances/name", method = RequestMethod.GET)
public void ingestMip4DataToES(@PathVariable("numberOfInstances") int numberOfInstances,
@PathVariable("name") String name)
if(numberOfInstances > 1)
List<IdentifiableType> identifiableTypes = generateMultipleInstancesOfMip4Data(numberOfInstances, name);
if(!identifiableTypes.isEmpty())
dumpBulkMip4DataToES(identifiableTypes);
else
IdentifiableType identifiableType = generateSingleInstanceOfMip4Data(name);
if(identifiableType != null)
dumpMip4DataToES(identifiableType);
@HystrixCommand(fallbackMethod = "fallbackForMip4SingleDataGeneration")
private IdentifiableType generateSingleInstanceOfMip4Data(String name)
String url = GENERATOR_URL + name;
ResponseEntity<IdentifiableType> response = restTemplate.getForEntity(url, IdentifiableType.class);
return response.getBody();
private IdentifiableType fallbackForMip4SingleDataGeneration()
logger.info("Calling fallback method for mip4 data generation as request to service failed.");
return null;
在主类中包含必需的注释。
@SpringBootApplication
//@EnableDiscoveryClient
@EnableCircuitBreaker
@EnableHystrixDashboard
public class InsaneMip4ElasticSearchApplication
public static void main(String[] args)
SpringApplication.run(InsaneMip4ElasticSearchApplication.class, args);
资源文件包含以下条目
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include=hystrix.stream
management.endpoints.jmx.exposure.include=*
management.endpoint.health.show-details=ALWAYS
management.endpoint.shutdown.enabled=true
并且为 pom 文件创建了以下条目
<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>
Hystrix 仪表板如下所示
【问题讨论】:
确保控制达到这个功能generateSingleInstanceOfMip4Data
。如果流程没有通过 HystrixCommand 到达函数一次,您将看不到任何东西
对不起,我听不懂你的意思
一旦你启动应用程序。这个函数什么时候叫generateSingleInstanceOfMip4Data
?就做什么动作?我是说应该调用这个方法让你在仪表板中看到一些东西。您是否正在执行一些导致调用此函数的操作。如果不这样做。
是的,这个函数是从另一个函数调用的,我刚刚编辑了代码供您参考。当我使用请求映射执行映射的 url 时,也没有任何反应。
你确定你使用 numberofInstances
【参考方案1】:
由于我的配置错误,仪表板是空的。 HystrixCommand 应该附加到使用 RequestMapping 注释的方法上。这是因为 Hystrix 监控 api 端点。
因此,进行以下更改使事情对我有用。
@HystrixCommand(fallbackMethod = "fallbackForMip4DataGeneration")
@RequestMapping(value = "/elasticsearch/numberOfInstances/name", method = RequestMethod.GET)
public void ingestMip4DataToES(@PathVariable("numberOfInstances") int numberOfInstances,
@PathVariable("name") String name)
if(numberOfInstances > 1)
List<IdentifiableType> identifiableTypes = generateMultipleInstancesOfMip4Data(numberOfInstances, name);
if(!identifiableTypes.isEmpty())
dumpBulkMip4DataToES(identifiableTypes);
else
IdentifiableType identifiableType = generateSingleInstanceOfMip4Data(name);
if(identifiableType != null)
dumpMip4DataToES(identifiableType);
private void fallbackForMip4DataGeneration(int numberOfInstances, String name)
logger.info("Calling fallback method for mip4 data generation as request to service failed.");
如您所见,现在 @HystrixCommand 注释应用于 ingestMip4DataToES() 方法,因为该方法具有 @RequestMapping 注释。之前将@HystrixCommand 应用于 generateSingleInstanceOfMip4Data() 方法是不正确的。
现在,当我拨打 http://localhost:9083/mip4/elasticsearch/1/CUnitType 时,我可以在 hystrix 仪表板上看到该呼叫的实时监控。
如果使用 Springboot 2 (2.0.2.RELEASE) 进行监控,请记住通过http://host:port/hystrix 访问仪表板并在 url 中应用http://host:port/actuator/hystrix.stream。
【讨论】:
【参考方案2】:请将@HystrixCommand(fallbackMethod = "fallbackForMip4SingleDataGeneration") 添加到您的@RequestMapping 并尝试多次访问@RequestMapping url。一旦你访问了你想要的@RequestMapping url,然后去 hystrix.stream,你会找到必要的信息。
【讨论】:
以上是关于无法在 Spring Boot 应用程序中设置 hystrix 仪表板的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Spring Boot 应用程序提供的响应中设置“Access-Control-Allow-Origin”标头
如何在 Spring Boot Tests 中设置 servlet 上下文路径?
无法在 Spring Boot 2 中设置“spring.servlet.multipart.max-file-size”的最大值