Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Tutorial: Compila una aplicación de microservicios con MongoDB

Este tutorial muestra cómo compilar una arquitectura de microservicios utilizando Spring Boot, Spring Cloud y MongoDB. Concretamente, este tutorial te guía paso a paso para crear múltiples servicios que funcionen juntos y formen una aplicación completa.

Puedes encontrar el código fuente completo en los siguientes repositorios de GitHub:

  • Aplicación de microservicios

  • Repositorio de configuración

Spring Boot es un framework diseñado sobre el Spring Framework. Agrega autoconfiguración, valores por defecto y funcionalidades listas para producción para simplificar la construcción de aplicaciones Java basadas en Spring, incluida la integración con Spring Data MongoDB. Para obtener más información, consulta la Documentación de Spring Boot.

Spring Cloud es una colección de herramientas para construir sistemas distribuidos y microservicios. Ofrece funcionalidades para la gestión de configuración, descubrimiento de servicios y enrutamiento inteligente. Para obtener más información, ver la documentación de Spring Cloud.

Esta guía muestra cómo realizar las siguientes acciones:

  • Verifique los requisitos previos

  • Clonar los repositorios de ejemplo

  • Configurar un servidor de configuración

  • Configure un registro de servicios

  • Configura una puerta de enlace API

  • Crea microservicios MongoDB

  • Probar las API REST

1

Antes de comenzar, asegúrese de tener instalado lo siguiente:

2

Clona los repositorios de aplicaciones y configuraciones de microservicios ejecutando los siguientes comandos:

git clone git@github.com:mongodb-developer/microservices-architecture-mongodb.git
git clone git@github.com:mongodb-developer/microservices-architecture-mongodb-config-repo.git

Siga las instrucciones en el README.md archivo del microservices-architecture-mongodb repositorio para iniciar cada servicio.

3

Un servidor de configuración almacena todos los archivos de configuración de tus microservicios en un único repositorio.

La configuración del servidor de configuración se define en el archivo microservices-architecture-mongodb/config-server/src/main/resources/application.properties:

spring.application.name=config-server
server.port=8888
spring.cloud.config.server.git.uri=${HOME}/Work/microservices-architecture-mongodb-config-repo
spring.cloud.config.label=main

Esta configuración especifica la ubicación del repositorio de Git que almacena la configuración de tus microservicios y la rama a utilizar.

La aplicación servidor de configuración está definida en la siguiente clase Java ubicada en el directorio microservices-architecture-mongodb/config-server/src/main/java/com/mongodb/configserver/:

ConfigServerApplication.java
package com.mongodb.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}

Nota

La anotación @EnableConfigServer permite la funcionalidad del servidor de configuración en su aplicación Spring Boot.

4

Un registro de servicios rastrea qué microservicios están en ejecución y sus ubicaciones. Otros servicios usan esta información para comunicarse con los microservicios que necesitan.

La configuración del registro de servicios está definida en el siguiente archivo de propiedades:

spring.application.name=service-registry
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

Las dos últimas propiedades evitan que el registro de servicios se registre a sí mismo.

La aplicación de registro de servicio se define en la siguiente clase de Java ubicada en el directorio microservices-architecture-mongodb/service-registry/src/main/java/com/mongodb/serviceregistry/:

ServiceRegistryApplication.java
package com.mongodb.serviceregistry;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class ServiceRegistryApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistryApplication.class, args);
}
}

Nota

La anotación @EnableEurekaServer habilita la funcionalidad del registro de servicios en tu aplicación Spring Boot.

5

Una API gateway proporciona un único punto de entrada para acceder a todos tus microservicios. El gateway distribuye las solicitudes entre varios microservicios y gestiona la seguridad, la supervisión y otros aspectos.

La configuración del gateway API se define en el archivo microservices-architecture-mongodb/api-gateway/src/main/resources/application.yml:

server:
port: 8080
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: company-service
uri: lb://company-service
predicates:
- Path=/api/company/**,/api/companies
- id: employee-service
uri: lb://employee-service
predicates:
- Path=/api/employee/**,/api/employees
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: localhost

Esta configuración define las rutas para los servicios de la empresa y de los empleados, y registra el gateway en el registro de servicios.

6

Esta aplicación incluye dos microservicios: un servicio de empresa y un servicio de empleados. Cada microservicio se conecta a su propia instancia de MongoDB para mantener la independencia.

La configuración del servicio de la empresa está definida en el archivo microservices-architecture-mongodb-config-repo/company-service.properties:

spring.data.mongodb.uri=${MONGODB_URI_1:mongodb://localhost:27017}
spring.threads.virtual.enabled=true
management.endpoints.web.exposure.include=*
management.info.env.enabled=true
info.app.name=Company Microservice
info.app.java.version=21
info.app.type=Spring Boot
server.port=8081
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.hostname=localhost

La configuración del servicio de empleados se define en el archivo microservices-architecture-mongodb-config-repo/employee-service.properties:

spring.data.mongodb.uri=${MONGODB_URI_2:mongodb://localhost:27018}
spring.threads.virtual.enabled=true
management.endpoints.web.exposure.include=*
management.info.env.enabled=true
info.app.name=Employee Microservice
info.app.java.version=21
info.app.type=Spring Boot
server.port=8082
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.hostname=localhost

Nota

Para el desarrollo local, el servicio de la empresa se conecta a MongoDB en el puerto 27017 y el servicio para empleados se conecta a MongoDB en el puerto 27018. Para producción, utiliza clústeres de MongoDB Atlas separados y establece las cadenas de conexión utilizando las variables de entorno MONGODB_URI_1 y MONGODB_URI_2.

7

Después de iniciar todos los servicios, verifica que tu arquitectura de microservicios funciona correctamente asegurando que los siguientes servicios estén en funcionamiento:

  • Servidor de configuración en el puerto 8888

  • Registro de servicio en el puerto 8761

  • Puerta de enlace de API en el puerto 8080

  • Servicio de la empresa en el puerto 8081

  • Servicio de empleados en el puerto 8082

Además, asegúrate de tener dos instancias de MongoDB ejecutándose en los puertos 27017 y 27018, o dos clústeres de MongoDB Atlas.

Ejecuta el script de prueba ejecutando el siguiente comando:

./2_api-tests.sh

El script crea empresas y empleados, luego los recupera usando la API REST. La salida devuelta por el script se asemeja a lo siguiente:

DELETE Companies
2
DELETE Employees
2
POST Company 'MongoDB'
POST Company 'Google'
GET Company 'MongoDB' by 'id'
{
"id": "661aac7904e1bf066ee8e214",
"name": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00"
}
GET Company 'Google' by 'name'
{
"id": "661aac7904e1bf066ee8e216",
"name": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00"
}
GET Companies
[
{
"id": "661aac7904e1bf066ee8e214",
"name": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00"
},
{
"id": "661aac7904e1bf066ee8e216",
"name": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00"
}
]
POST Employee Maxime
POST Employee Tim
GET Employee 'Maxime' by 'id'
{
"id": "661aac79cf04401110c03516",
"firstName": "Maxime",
"lastName": "Beugnet",
"company": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00",
"joined": "2018-02-12T00:00:00.000+00:00",
"salary": 2468
}
GET Employee 'Tim' by 'id'
{
"id": "661aac79cf04401110c03518",
"firstName": "Tim",
"lastName": "Kelly",
"company": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00",
"joined": "2023-08-23T00:00:00.000+00:00",
"salary": 13579
}
GET Employees
[
{
"id": "661aac79cf04401110c03516",
"firstName": "Maxime",
"lastName": "Beugnet",
"company": "Google",
"headquarters": "Mountain View",
"created": "1998-09-04T00:00:00.000+00:00",
"joined": "2018-02-12T00:00:00.000+00:00",
"salary": 2468
},
{
"id": "661aac79cf04401110c03518",
"firstName": "Tim",
"lastName": "Kelly",
"company": "MongoDB",
"headquarters": "New York",
"created": "2009-02-11T00:00:00.000+00:00",
"joined": "2023-08-23T00:00:00.000+00:00",
"salary": 13579
}
]

El servicio para empleados consulta al servicio de la empresa para recuperar los detalles de la empresa. El siguiente código muestra cómo el servicio de empleados se comunica con el servicio de la empresa a través del registro del servicio:

private CompanyDTO getCompany(String company) {
String url = "http://company-service/api/company/name/";
CompanyDTO companyDTO = restTemplate.getForObject(url + company, CompanyDTO.class);
if (companyDTO == null) {
throw new EntityNotFoundException("Company not found: ", company);
}
return companyDTO;
}

La URL hace referencia al servicio de la empresa por su nombre y no por la dirección IP ni el puerto, lo que confirma que el registro de servicios funciona correctamente.

Para obtener más información sobre cómo crear microservicios con Spring y MongoDB, consulta los siguientes recursos:

Volver

Spring Data CSFLE

En esta página