Microservicios en Java: no temas, es más fácil de lo que parece
\n\n¿Alguna vez has mirado una aplicación monolítica y has pensado: «Ojalá pudiera dividir esto en partes para no tener miedo de que un cambio lo rompa todo»? Felicidades, estás maduro para los microservicios. En el mundo de Java, este tema se ha rodeado de mitos sobre una complejidad increíble y un montón de tecnologías. En realidad, se puede empezar con dos clases y un archivo application.yml.
En este artículo no construiremos una nave espacial. Escribiremos dos microservicios simples que se comunicarán entre sí por HTTP y entenderemos por dónde empezar realmente. Sin magia, solo Java, Spring Boot y sentido común.
\n\n¿Qué es un microservicio? (Explicado fácil)
\n\nImagina un restaurante. Un monolito es cuando un solo cocinero lo hace todo: cocina la sopa, prepara el filete y lava los platos. Los microservicios son un equipo: un cocinero solo es responsable de las sopas, otro de la carne, otro de los postres. Cada uno trabaja de forma independiente, pero juntos crean un menú completo.
\n\nEn Java, un microservicio es una aplicación independiente que se encarga de una función de negocio (por ejemplo, «Gestión de usuarios» o «Procesamiento de pedidos»). Tiene su propia base de datos, su propio código y se comunica con otros servicios a través de la red (generalmente por HTTP/REST o mediante brokers de mensajes).
\n\nPor dónde empezar: el kit de herramientas del caballero
\n\nPara tu primer proyecto solo necesitarás tres cosas:
\n\n- \n
- Java 17+ — la versión moderna con características útiles (records, sealed classes). \n
- Spring Boot 3.x — el framework más popular para microservicios en Java. Se encarga del 80% del trabajo rutinario. \n
- Maven o Gradle — para la compilación. Maven es más fácil para empezar, Gradle es más rápido. \n
Adicionalmente, cuando quieras complicarlo:
\n- \n
- Docker — para empaquetar el servicio en un contenedor. \n
- Spring Cloud — para el descubrimiento de servicios (Service Discovery) y balanceo de carga. \n
- PostgreSQL/H2 — base de datos a elegir. \n
Consejo: no intentes aprender Kubernetes y Kafka de inmediato. Empieza con una comunicación REST simple.
\n\nEscribimos el primer microservicio: Servicio de Usuarios
\n\nCrearemos un microservicio simple que pueda proporcionar información sobre los usuarios. Usaremos Spring Initializr (start.spring.io) o crearemos el proyecto manualmente.
\n\nAñade las dependencias en pom.xml:
<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-web</artifactId>\n</dependency>\n\n<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-data-jpa</artifactId>\n</dependency>\n\n<dependency>\n <groupId>com.h2database</groupId>\n <artifactId>h2</artifactId>\n <scope>runtime</scope>\n</dependency>\n\nAhora escribimos el modelo de usuario:
\n\nimport jakarta.persistence.*;\n\n@Entity\n@Table(name = "users")\npublic class User {\n @Id\n @GeneratedValue(strategy = GenerationType.IDENTITY)\n private Long id;\n private String name;\n private String email;\n\n // constructores, getters, setters (se puede usar Lombok)\n public User() {}\n\n public User(String name, String email) {\n this.name = name;\n this.email = email;\n }\n\n // getters y setters\n}\n\nRepositorio (acceso simplificado a datos):
\n\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface UserRepository extends JpaRepository<User, Long> {\n}\n\nY el controlador — el endpoint REST:
\n\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\n@RestController\n@RequestMapping("/api/users")\npublic class UserController {\n\n private