Skip to main content

Spring Cloud

Zuul to Spring Cloud Gateway Migration: Routes, Filters, and the Blocking-Call Traps

The first time I ported a Zuul gateway to Spring Cloud Gateway, the routes took an afternoon — and the filters took two weeks. That ratio surprises every team that attempts this migration, because the route configuration looks superficially similar while the filter model is a different universe: Zuul 1 is a blocking servlet filter chain, Spring Cloud Gateway runs on Netty with Project Reactor, and a single hidden blocking call in a ported filter can stall your entire gateway. This guide covers the route conversion, the filter-by-filter port, and the blocking-call traps, in that order.

Spring Cloud Netflix to Modern Alternatives: The Complete Migration Guide (2026)

In 2020 I published a dozen tutorials on this site covering Eureka, Hystrix, Zuul, Ribbon, and Feign — the Spring Cloud Netflix stack. They were accurate then. Today, most of that stack is dead: Netflix put Hystrix into maintenance mode back in 2018, Zuul 1 and Ribbon followed, and the Spring team removed them from the Spring Cloud release train entirely. If you are still running any of these libraries on Spring Boot 2.x, this guide maps every Netflix component to its modern replacement and shows you the actual migration steps — including the parts that break.

A Practical Guide to Monitoring Spring Boot Microservices with Prometheus & Grafana

Microservices are powerful. They allow us to build scalable, resilient, and independently deployable systems. But this power comes with a cost: complexity. When you have dozens or even hundreds of services interacting, figuring out what’s going on—especially when something goes wrong—can feel like searching for a needle in a haystack of haystacks. This is where observability comes in. It’s more than just “monitoring”; it’s about gaining deep, actionable insights into your system’s behavior. We can break observability down into three pillars: Logs: Structured, event-based records of what happened. “User X failed to log in at 10:05 PM.” Metrics: Aggregated, numerical data over time. “The average API response time over the last 5 minutes was 200ms.” Traces: The end-to-end journey of a request as it travels through multiple services. “Request ABC started at the API gateway, went to the user-service, then the auth-service, and took 350ms in total.” In this guide, we’ll focus on the cornerstone of observability: metrics. We’ll build a complete, production-grade monitoring stack for a Spring Boot microservice using an industry-standard toolkit. The Monitoring Dream Team We’ll use a combination of powerful tools that work seamlessly together: Spring Boot Actuator: Provides production-ready features for our app, including a wealth of internal metrics out-of-the-box. Micrometer: An application metrics facade that acts as a universal translator. Spring Boot uses it to format its metrics so that various monitoring systems can understand them. We’ll configure it to talk “Prometheus”. Prometheus: The powerhouse of our stack. It’s a time-series database that periodically “scrapes” (pulls) metrics from our application and stores them efficiently. Grafana: The visualization layer. Grafana connects to Prometheus, queries the stored metrics, and turns them into beautiful, insightful dashboards. Here’s the data flow we’re building: Spring Boot App → Actuator → Micrometer → a /prometheus endpoint → Prometheus Scraper → Grafana Dashboard Let’s get building!

Spring Cloud: Getting started with Hystrix Dashboard

⚠️ This tutorial is outdated. Hystrix Dashboard was removed from Spring Cloud and does not work with Spring Boot 3.x. The modern approach is Resilience4j metrics with Prometheus & Grafana — see the Spring Cloud Netflix migration guide. This post remains online for teams maintaining legacy systems. This is a quick tutorial on Hystrix dashboard. Hystrix dashboard allows you to view the overall status of your Spring cloud application at a single glance. It provides access to vital metrics of your application and gives you a graphical representation of those for better understanding. This post is the continuation of Spring Cloud: Adding Hystrix Circuit Breaker and Spring Cloud: Playing with Hystrix Circuit Breaker. Please go through those post, if you haven't. Those posts explain about Hystrix circuit breaker. TL;DR You can download whole project by clicking following link. Spring Cloud (V2.3.1) Hystrix DashboardDownload

Spring Cloud Config Server on Spring Boot 3.x: Git Mode, Native Mode, and Runtime Refresh

Spring Cloud Config is, alongside Eureka, one of the two survivors of the original Spring Cloud stack — still maintained, still the standard answer for centralized configuration outside Kubernetes. This post is a complete rewrite of my 2020 Config Server tutorials for Spring Boot 3.x: a Config Server backed by Git (with native/filesystem mode for local development), clients using the modern spring.config.import mechanism instead of the long-gone bootstrap.properties, and runtime refresh that actually works.

Spring Cloud: Exploring Spring Cloud Config Server (Native Mode)

⚠️ This tutorial covers an old Spring Cloud version. Spring Cloud Config is still maintained, but this setup targets Spring Boot 2.x. For Spring Boot 3.x configuration (Git and native mode), see the updated Spring Cloud Config Server guide and the Spring Cloud Netflix migration guide. This is a quick tutorial on Spring Cloud Config Server. In brief, Spring cloud config allows you to have applications/micro-services configuration at a centralized place. Since we are working on spring micro-services, in production we may have hundreds of micro-services running together. Now if we want to manage configuration for hundreds of those micro-services then it would be a big pain if we do it manually. Instead, we will use Spring cloud config server to manage that configuration from a central place. TL;DR You can download whole project by clicking following link. Spring Cloud (V2.3.1) Config Server in Native ModeDownload Spring Cloud (V2.3.1) Sample Configuration for Config Server in Native ModeDownload

Spring Cloud: Adding Filters in Zuul Gateway

⚠️ This tutorial is outdated. Zuul 1 (including its filter model) was removed from Spring Cloud and does not work with Spring Boot 3.x. Filters are now written as Gateway filters — see the Zuul to Spring Cloud Gateway migration guide and the Spring Cloud Netflix migration guide. This post remains online for teams maintaining legacy systems. This tutorial is the continuation of Spring Cloud: Exploring Zuul Gateway tutorial. In this tutorial, we will be exploring the functionality of filters provided by Zuul. As discussed earlier Zuul provides various filters which we can use for request validation or processing. Let's say if you have an incoming request and if you want to check whether the user is authenticated or not, you can use Zuul pre-filter for this.  If your request is processed and if you want to encrypt the response you can use Zuul post filter. The major upside of Zuul filter is, you can manage all of your filters at a centralized location. Zuul has provision to create following four types of filter. pre filters run before the request is routed.route filters can handle the actual routing of the request.post filters run after the request has been routed.error filters run if an error occurs while handling the request.

Spring Cloud: Exploring Zuul Gateway

⚠️ This tutorial is outdated. Zuul 1 was removed from Spring Cloud and does not work with Spring Boot 3.x. For current projects, use Spring Cloud Gateway — and see the Spring Cloud Netflix migration guide for the full modern stack. This post remains online for teams maintaining legacy systems. This is a quick tutorial for Spring cloud Zuul component. In this tutorial, we will explore Zuul functionality and will create a gateway to our Spring cloud environment using Zuul. What is Zuul? Zuul is a gateway component in Spring cloud ecosystem. It provides access to the services present in our Spring cloud from services/applications which are outside of our environment. Zuul creates a single entry point for our application which we can use from the outside world. In our environment, we might have 100's of services running, each one serving a special purpose. Now if we want to access those services via another network or from the internet, then exposing those 100 services will not be a great idea. In such cases, Zuul comes handy. It provides us with a single proxy to access those services. Apart from that Zuul also provides request filters. We can use those to check/process each and every request before it hits the actual service. TL;DR You can download whole project by clicking following link. Spring Cloud (V2.3.1) ZuulDownload

Spring Cloud: Playing with Hystrix Circuit Breaker

⚠️ This tutorial is outdated. Netflix Hystrix has been in maintenance mode since 2018 and was removed from Spring Cloud — it does not work with Spring Boot 3.x. For current projects, use Resilience4j instead, and see the Spring Cloud Netflix migration guide for the full modern stack. This post remains online for teams maintaining legacy systems. This tutorial is a continuation of Spring Cloud: Adding Hystrix Circuit Breaker. In the previous tutorial, we had an overview of Hystrix circuit breaker and we have implemented the same in our producer application. Now in this tutorial, we will see it in action.