How to activate /turbine.stream endpoint in a stan

2019-05-30 04:24发布

问题:

I am trying to create a standalone application to collect Hystrix stream from other applications. But it does not expose the /turbine.stream endpoint by default. I am sure what is missing in my project.

Spring Boot: 2.0.4.RELEASE, Spring Cloud: Finchley.SR1

The application class:

@SpringBootApplication
@EnableDiscoveryClient
@EnableTurbine
public class DemoApplication {

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

}

The content of applicaiton.yml:

server:
  port: 8383
spring:
  application:
    name: hystrix-turbine

management:
  endpoints:
    web.exposure.include: '*'
applications: hystrix
turbine:
  aggregator:
    clusterConfig: ${applications}
  appConfig: ${applications}
#  instanceUrlSuffix.default: actuator/hystrix.stream

And the maven dependencies:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies> 

I created a sample project for this.

回答1:

I'd suggest you check the configuration steps below:

1) Your stream URL in the Hystrix Dashboard should be:

http://localhost:{turbine app port}/turbine.stream?cluster={configured cluster in properties file}

The url should be pointing to the port of the application that has @EnableTurbine annotation in your main class.

2) Check if you are getting a response for:

http://localhost:{client app port}/actuator/hystrix.stream

(use your browser for this) (this should be coming from the application you have enabled hystrix on using @EnableCircuitBreaker)

If you're getting pings, then atleast your hystrix stream is accessible. If not, Check if you have: org.springframework.boot:spring-boot-starter-actuator in your client side dependencies and make sure you have the below property set in application.properties file of the application that has @EnableCircuitBreaker in the main class:

management.endpoints.web.exposure.include= hystrix.stream, info, health

Check the URL again.

3) Once your get a reponse from hystrix.stream, you can now configure your cluster on the turbine app properties file:

turbine:

      appConfig: {serviceId in lower case}
      aggregator:
        clusterConfig: {above serviceId in upper case} 

after running the app, check if you've configured the cluster correctly:

http://localhost:{turbine app port}/clusters

you should'nt be getting a "[]" on your browser if all's well.

Once you see a response on the clusters endpoint, you will now be able to see the details on the dashboard when you point it to the turbine app