Spring Boot, Spring Cloud y Reactor para desarrolladores C# — Misión
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
Por qué aprendo esto
Sección titulada «Por qué aprendo esto»El curso de Java me enseñó el lenguaje. Sin embargo, el código Java que encuentro en la práctica rara vez es Java a secas: es un servicio Spring Boot, a menudo reactivo, detrás de un gateway de Spring Cloud. Sus anotaciones hacen el trabajo que Program.cs hace de forma explícita en ASP.NET Core, y sus Mono y Flux se parecen a Task y a IAsyncEnumerable sin comportarse como ellos.
Quiero leer y escribir esos servicios con la misma seguridad que una aplicación ASP.NET Core: saber de dónde viene cada bean, predecir en qué hilo se ejecuta un pipeline y distinguir una verdadera decisión de diseño de una simple costumbre.
Para quién es este curso
Sección titulada «Para quién es este curso»Eres un desarrollador C# con experiencia. Conoces ASP.NET Core, su inyección de dependencias, IOptions, IHostedService, los health checks, HttpClient, IAsyncEnumerable y probablemente Polly y YARP. Has seguido Java para desarrolladores C#, o te sientes cómodo con Java 25, Maven y JUnit. Este curso te remite a las lecciones de aquel curso en lugar de repetirlas: la lección 9 para los hilos virtuales, la lección 10 para Maven, la lección 11 para JUnit, Mockito y BlockHound.
El ejemplo conductor
Sección titulada «El ejemplo conductor»Las lecciones construyen pequeños servicios en torno a la teoría musical: un servicio de escalas que devuelve las notas y los acordes de un modo, un flujo de progresiones, un cliente de cifrados de acordes. El dominio es un módulo Java sencillo, music, sin Spring ni Reactor. Al final del curso, las piezas encajan así:
flowchart LR client[Navegador o cliente HTTP] --> gateway[Spring Cloud Gateway] gateway --> scales["Servicio de escalas (WebFlux)"] gateway --> progressions["Servicio de progresiones (server-sent events)"] progressions -->|WebClient| scales scales --> db[(Base de datos R2DBC)] config[Servidor de configuración] -.-> scales config -.-> progressions progressions -->|Spring Cloud Stream| broker[[Broker de mensajes]]Las lecciones 1 a 4 construyen las dos primeras cajas de la derecha; las lecciones siguientes añaden las demás. Todo se ejecuta en localhost, arrancado por las pruebas, sin Docker.
Al final de este curso, seré capaz de
Sección titulada «Al final de este curso, seré capaz de»- crear una aplicación Spring Boot y explicar de dónde vienen cada uno de sus beans, propiedades y endpoints;
- trasladar la inyección de dependencias, la configuración, las opciones y los health checks de ASP.NET Core a los de Spring;
- escribir, probar y depurar pipelines de Reactor, y decir en qué hilo se ejecuta cada paso;
- elegir entre Spring MVC sobre hilos virtuales y WebFlux para un servicio dado;
- construir APIs y clientes HTTP reactivos con WebFlux y
WebClient; - poner delante de esos servicios un gateway, configuración centralizada, descubrimiento de servicios y resiliencia con Spring Cloud;
- observar y probar un conjunto de servicios Spring como lo haría con un conjunto de servicios ASP.NET Core.
| # | Lección | Ya conoces |
|---|---|---|
| 1 | Spring Boot visto desde ASP.NET Core | Program.cs, IServiceCollection, appsettings.json, IOptions, health checks |
| 2 | Reactor: Mono y Flux |
Task, IAsyncEnumerable, LINQ, Rx.NET |
| 3 | Reactor por dentro | el thread pool, ConfigureAwait, los channels, Polly, AsyncLocal |
| 4 | WebFlux | minimal APIs, HttpClient, server-sent events |
| 5 | Acceso reactivo a datos con R2DBC y Spring Data | Entity Framework Core, IAsyncEnumerable desde un DbContext |
| 6 | Spring Cloud Gateway | YARP |
| 7 | Configuración centralizada con Spring Cloud Config | proveedores de configuración, Azure App Configuration |
| 8 | Descubrimiento de servicios y balanceo de carga del lado del cliente | descubrimiento de servicios de .NET Aspire, IHttpClientFactory |
| 9 | Resiliencia con Resilience4j y Spring Cloud Circuit Breaker | Polly, Microsoft.Extensions.Http.Resilience |
| 10 | Mensajería con Spring Cloud Stream | MassTransit, clientes de Azure Service Bus |
| 11 | Observabilidad con Micrometer | OpenTelemetry para .NET, dotnet-counters |
| 12 | Probar un conjunto de servicios Spring | WebApplicationFactory, pruebas de integración |
Diario: lo que probé, lo que me sorprendió, lo que aún tengo que verificar.
Recursos
Sección titulada «Recursos»- Documentación de referencia de Spring Boot y la guía de migración a Spring Boot 4.0
- Referencia de Spring Framework: el contenedor IoC, Web MVC y WebFlux
- Guía de referencia de Reactor 3 y el Javadoc de
Flux, cuyos diagramas de canicas vale la pena leer - Spring Cloud: release trains y proyectos
- Especificación Reactive Streams, las cuatro interfaces sobre las que se apoya Reactor
- Del lado .NET: fundamentos de ASP.NET Core, Reactive Extensions para .NET