No microservice is an island. Oh sure, we all talk about isolated components and independent teams. But your apps and services get combined and used in all sorts of ways. It’s inevitable. As you consider how your microservices interact with each other, you’ll uncover new challenges. Fortunately, there’s technology that’s made those challenges easier to solve.
Spring Boot is hot. Like real hot. At this point, it’s basically the de facto way for Java developers build modern apps.
Spring Cloud builds on Spring Boot and introduces all sorts of distributed systems capabilities to your code. Last year I delivered a Pluralsight course that looked at building services with it. But that was only half of the equation. A big portion of Spring Cloud simplifies interactions between services. So, I set out to do a sequel course on Spring Cloud, and am thrilled that the course came out today.
This course, Java Microservices with Spring Cloud: Coordinating Services, focuses on helping you build a more effective, maintainable microservices architecture. How do you discover services? Can you prevent cascading failures? What are your routing options? How does messaging play a role? Can we rethink data integration and do it better? All those questions get answered in this ~6 hour course. The six modules of the course include:
- Introducing Spring Cloud and microservices coordination scenarios. A chat about the rise of microservices, problems that emerge, and what Spring Cloud is all about.
- Locating services at runtime using service discovery. The classic “configuration management DB” can’t keep up with the pace of change in a microservices architecture. No, you need a different way to see a live look at what services exist, and where they are. Enter Spring Cloud Eureka. We take a deep look at how to use it to register and discovery services.
- Protecting systems with circuit breakers. What happens when a service dependency goes offline? Bad things. But you can fail fast and degrade gracefully by using the right approach. We dig into Spring Cloud Hystrix in this module and look at the interesting ways to build a self-healing environment.
- Routing your microservices traffic. A centralized load balancer may not be the right fit for a fast-changing environment. Same goes for API gateways. This module looks at Spring Cloud Ribbon for client-side load balancing, and Spring Cloud Zuul as a lightweight microproxy.
- Connecting microservices through messaging. Message brokers offer one convenient way to link services in a loosely coupled way. Spring Cloud Stream is a very impressive library that makes messaging easy. Add competing consumers, partition processing, and more, whether you’re using RabbitMQ or Apache Kafka underneath. We do a deep dive in this module.
- Building data processing pipelines out of microservices. It’s time to rethink how we process data, isn’t it? This shouldn’t be the realm of experts, and require bulky, irregular updates. Spring Cloud Data Flow is one of the newest parts of Spring Cloud, and promises to mess with your mind. Here, we see how to do real-time or batch processing by connecting individual microservices together. Super fun.
It’s always a pleasure creating content for the Pluralsight audience, and I do hope you enjoy the course!
Great course. I am enjoying it.
I’m running into couple issues in chapter3 (protecting systems with circuit breakers). I couldn’t find a better way to contact you, so posting here.
It is the last demo of the chapter where all the streams are aggregated in turbine. The front end apps (fastpass console and billboard) fails on start up. I am getting “ClassNotFoundException: com.netflix.config.DeploymentContext$ContextKey” error. My dependency version for netflix-hystrix-stream and starter-stream-rabbit is 1.4.2 and 1.3.3 RELEASE; newer than what you have used in the course.
I’m having similar startup issues with hystrix-turbine app. Stream rabbit is no longer part of cloud messaging in initializr. So I choose cloud stream instead. Getting “BeanCreationException: Cannot create binder factory, no `META-INF/spring.binders` resources found on the classpath” error.
Your guidance is much appreciated.
Hi Sankar. I believe you need the specific binder in your classpath. While not present in start.spring.io, you can still find binders in the Maven repos … https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-stream-binder-rabbit
Thank you very much for the response. I was successfully able to compile hystrix-turbine app after adding the rabbit binders as you suggested. However I am having issues during runtime. Spring boot dashboard shows turbine app is running on an unknown port. I do have server.port=8087 entry in application.properties; startup log shows Rx server started on port 8087 and tomcat on -1. Below is log snippets and setup of my app.
Thank you for your help.
spring-cloud-starter-turbine-stream – 1.4.3
spring-cloud-stream – 1.3.2
spring-boot-starter-test – 1.5.10
spring-cloud-stream-test-support – 1.3.2
spring-cloud-stream-biner-rabbit – 1.3.3
Messages during startup:
arterDeprecationWarningAutoConfiguration : spring-cloud-starter-archaius is deprecated as of Spring Cloud Netflix 1.4.0, please migrate to spring-cloud-starter-netflix-archaius
arterDeprecationWarningAutoConfiguration : spring-cloud-starter-eureka is deprecated as of Spring Cloud Netflix 1.4.0, please migrate to spring-cloud-starter-netflix-eureka
i.reactivex.netty.server.AbstractServer : Rx server started at port: 8087
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): -1 (http)
.s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to -1