Tutorial: Use Circuit Breaker Dashboard with Azure Spring Apps
Warning
Hystrix is no longer in active development and is currently in maintenance mode.
Note
The Basic, Standard, and Enterprise plans will be deprecated starting from mid-March, 2025, with a 3 year retirement period. We recommend transitioning to Azure Container Apps. For more information, see the Azure Spring Apps retirement announcement.
The Standard consumption and dedicated plan will be deprecated starting September 30, 2024, with a complete shutdown after six months. We recommend transitioning to Azure Container Apps. For more information, see Migrate Azure Spring Apps Standard consumption and dedicated plan to Azure Container Apps.
This article applies to: ✔️ Java ❌ C#
This article applies to: ✔️ Basic/Standard ✔️ Enterprise
This article shows you how to use Netflix Turbine and Netflix Hystrix on Azure Spring Apps. Spring Cloud Netflix Turbine is widely used to aggregate multiple Netflix Hystrix metrics streams so that streams can be monitored in a single view using Hystrix dashboard.
Note
Netflix Hystrix is widely used in many existing Spring apps but it's no longer in active development. If you're developing a new project, you should use Spring Cloud Circuit Breaker implementations like resilience4j instead. Different from Turbine shown in this tutorial, the new Spring Cloud Circuit Breaker framework unifies all implementations of its metrics data pipeline into Micrometer, which is also supported by Azure Spring Apps. For more information, see Collect Spring Cloud Resilience4J Circuit Breaker Metrics with Micrometer (Preview).
Prepare your sample applications
The sample is forked from this repository.
Clone the sample repository to your develop environment:
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
cd azure-spring-apps-samples/hystrix-turbine-sample
Build the three applications that are in this tutorial:
- user-service: A simple REST service that has a single endpoint of /personalized/{id}
- recommendation-service: A simple REST service that has a single endpoint of /recommendations, which is called by user-service.
- hystrix-turbine: A Hystrix dashboard service to display Hystrix streams and a Turbine service aggregating Hystrix metrics stream from other services.
mvn clean package -D skipTests -f user-service/pom.xml
mvn clean package -D skipTests -f recommendation-service/pom.xml
mvn clean package -D skipTests -f hystrix-turbine/pom.xml
Provision your Azure Spring Apps instance
Follow the steps in the Provision an instance of Azure Spring Apps section of Quickstart: Deploy your first application to Azure Spring Apps.
Deploy your applications to Azure Spring Apps
These apps don't use Config Server, so there's no need to set up Config Server for Azure Spring Apps. Create and deploy as follows:
az configure --defaults \
group=<resource-group-name> \
spring=<Azure-Spring-Apps-instance-name>
az spring app create --name user-service --assign-endpoint
az spring app create --name recommendation-service
az spring app create --name hystrix-turbine --assign-endpoint
az spring app deploy \
--name user-service \
--artifact-path user-service/target/user-service.jar
az spring app deploy \
--name recommendation-service \
--artifact-path recommendation-service/target/recommendation-service.jar
az spring app deploy \
--name hystrix-turbine \
--artifact-path hystrix-turbine/target/hystrix-turbine.jar
Verify your apps
After all the apps are running and discoverable, access user-service
with the path https://<Azure-Spring-Apps-instance-name>-user-service.azuremicroservices.io/personalized/1
from your browser. If the user-service can access recommendation-service
, you should get the following output. Refresh the web page a few times if it doesn't work.
[{"name":"Product1","description":"Description1","detailsLink":"link1"},{"name":"Product2","description":"Description2","detailsLink":"link3"},{"name":"Product3","description":"Description3","detailsLink":"link3"}]
Access your Hystrix dashboard and metrics stream
Verify using public endpoints or private test endpoints.
Using public endpoints
Access hystrix-turbine with the path https://<SERVICE-NAME>-hystrix-turbine.azuremicroservices.io/hystrix
from your browser. The following figure shows the Hystrix dashboard running in this app.
Copy the Turbine stream url https://<SERVICE-NAME>-hystrix-turbine.azuremicroservices.io/turbine.stream?cluster=default
into the text box, and select Monitor Stream. This action displays the dashboard. If nothing shows in the viewer, hit the user-service
endpoints to generate streams.
Note
In production, the Hystrix dashboard and metrics stream should not be exposed to the Internet.
Using private test endpoints
Hystrix metrics streams are also accessible from test-endpoint
. As a backend service, we didn't assign a public end-point for recommendation-service
, but we can show its metrics with test-endpoint at https://primary:<KEY>@<SERVICE-NAME>.test.azuremicroservices.io/recommendation-service/default/actuator/hystrix.stream
As a web app, Hystrix dashboard should be working on test-endpoint
. If it isn't working properly, there may be two reasons: first, using test-endpoint
changed the base URL from /
to /<APP-NAME>/<DEPLOYMENT-NAME>
, or, second, the web app is using absolute path for static resource. To get it working on test-endpoint
, you might need to manually edit the <base>
in the front-end files.