无法在 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”的最大值

如何在 Spring Boot 中设置过滤器链?

在Spring Boot中设置AWS凭证以进行本地测试和EC2部署

如何在 Spring Boot 中设置 enableLoggingRequestDetails='true'