5

Before posting this question, I went through numerous links like : Unable to connect to Command Metric Stream for Hystrix Dashboard with Spring Cloud and Unable to connect to Command Metric Stream in Spring Cloud + Hystrix + Turbine - MIME type ("text/plain") that is not "text/event-stream" and so on, but still things are not working for me.

I am using Spring Boot V2.2.2.RELEASE.

2020-01-14 22:52:23.805  INFO 8436 --- [io-8080-exec-10] ashboardConfiguration$ProxyStreamServlet : 

Proxy opening connection to: http://localhost:8000/hystrix.stream


2020-01-14 22:52:23.806  INFO 8436 --- [nio-8080-exec-2] ashboardConfiguration$ProxyStreamServlet : 

Proxy opening connection to: http://localhost:8000/hystrix.stream


2020-01-14 22:52:24.442  WARN 8436 --- [io-8080-exec-10] ashboardConfiguration$ProxyStreamServlet : Failed opening connection to http://localhost:8000/hystrix.stream : 404 : HTTP/1.1 404 
2020-01-14 22:52:24.442  WARN 8436 --- [nio-8080-exec-2] ashboardConfiguration$ProxyStreamServlet : Failed opening connection to http://localhost:8000/hystrix.stream : 404 : HTTP/1.1 404 
2020-01-14 22:52:37.391  INFO 8436 --- [nio-8080-exec-8] ashboardConfiguration$ProxyStreamServlet : 

Proxy opening connection to: http://localhost:8080/hystrix.stream


2020-01-14 22:52:37.397  INFO 8436 --- [nio-8080-exec-9] ashboardConfiguration$ProxyStreamServlet : 

Proxy opening connection to: http://localhost:8080/hystrix.stream


2020-01-14 22:52:37.488  WARN 8436 --- [nio-8080-exec-8] ashboardConfiguration$ProxyStreamServlet : Failed opening connection to http://localhost:8080/hystrix.stream : 404 : HTTP/1.1 404 
2020-01-14 22:52:37.488  WARN 8436 --- [nio-8080-exec-9] ashboardConfiguration$ProxyStreamServlet : Failed opening connection to http://localhost:8080/hystrix.stream : 404 : HTTP/1.1 404 

enter image description here

hystrix-dashboard::

HystrixDashboardApplication.java

@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {

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

bootstrap.properties

management.endpoints.web.exposure.include=hystrix.stream
management.endpoints.web.base-path=/
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>spring-boot-jdbcBatchUpdate</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>hystrix-dashboard</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

weather-app::

WeatherService.java

@Service
public class WeatherService {
    @Inject
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod="unknown")
    public String getWeather() {
        return restTemplate.getForEntity("http://weather-service/weather", String.class).getBody();
    }

    public String unknown() {
        System.out.println("~~~~~~~~~");
        return "unknown";
    }
}

WeatherAppApplication.java

@EnableDiscoveryClient
@EnableCircuitBreaker
@RestController
@SpringBootApplication
public class WeatherAppApplication {
    @Inject
    private WeatherService weatherService;

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

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @GetMapping(value = "/current/weather")
    public String getWeather() {
        return "The current weather is " + weatherService.getWeather();
    }
}

application.properties

server.port=8000
spring.application.name=weather-app
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

weather-service::

application.properties

server.port=9000
spring.application.name=weather-service
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

WeatherServiceApplication.java

@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class WeatherServiceApplication {

    private String[] weather = new String[] {"sunny", "cloudy", "rainy", "windy"};

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

    @GetMapping(value="/weather")
    public String getWeather() {
        int rand = ThreadLocalRandom.current().nextInt(0, 4);
        return weather[rand];
    }
}

enter image description here

Source Code here: https://github.com/javaHelper/spring-cloud-cordinating-services/tree/master/Protecting-Systems-with-Circuit-Breakers

PAA
  • 1
  • 46
  • 174
  • 282
  • You source code link and the code in the question don't seem to match. Is the link correct? – storesource Jan 16 '20 at 16:58
  • Yes, its the same. The issue is coming when using SPring Boot 2.2.2.RELEASE in all project and required dependencies – PAA Jan 16 '20 at 17:03
  • Still facing it? Or is it resolved. I can download your source code to see what's wrong if not. – storesource Jan 17 '20 at 12:39
  • Nope, it still not resolved. Request you to see why RabbitMQ shows events in different queue and other issues – PAA Jan 17 '20 at 14:33
  • Seems your dependencies are all over the place. There are a lot of collisions and duplicates in versions. Try clearing your cache and rebuild your project, fix the dependency issues first. Move common dependencies to a module that is being used by other modules. – storesource Jan 19 '20 at 05:39
  • Thanks for the suggestion, I realized that, but after doing the same, messing with the other issues too. Could you please help me to refactor the code ? – PAA Jan 19 '20 at 06:35
  • @storesource - Could you please help me to make this working ? – PAA Jan 25 '20 at 18:06

5 Answers5

9

in dashboard project add this to your properties

hystrix:
  dashboard:
    proxy-stream-allow-list: "*"

and, in weather-app add this

management:
  endpoints:
    web:
      exposure:
        include: "*"

then, open http://localhost:8080/hystrix and add http://localhost:8000/actuator/hystrix.stream

https://github.com/adetiamarhadi/spring-cloud-hystrix-dashboard.git https://github.com/adetiamarhadi/spring-cloud-hystrix-weather-app.git

Adetia Marhadi
  • 106
  • 1
  • 3
  • try with configs in [this](http://www.masterspringboot.com/cloud/netflix/configuring-hystrix-dashboard-in-your-spring-boot-application/) page if you couldn't get it working despite the above ones. – faghani May 30 '22 at 15:26
1

try adding the below line in Hystrix Dashboard project it worked for me.

application.yml

hystrix:
  dashboard:
    proxy-stream-allow-list: "*"
1

The Hystrix Dashboard stream URL that you have to provide is now:

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

0

Add below properties to application.properties file

management.endpoints.web.exposure.include=*
hystrix.dashboard.proxy-stream-allow-list=*
Ritu Gupta
  • 2,249
  • 1
  • 18
  • 11
-1

I just added below in application.properties file and it started working:

management.endpoint.hystrix.stream.enabled=true
fcdt
  • 2,371
  • 5
  • 14
  • 26