3 min de lectura

Microservicios Cloud Native con Quarkus

Microservicios Cloud Native con Quarkus

Quarkus ha revolucionado el desarrollo Java para la nube. Aprende a crear microservicios eficientes que arrancan en milisegundos.

¿Por qué Quarkus?

  • Arranque ultrarrápido: < 1 segundo en JVM, < 50ms nativo
  • Bajo consumo de memoria: 10x menos que frameworks tradicionales
  • Developer Joy: Live reload, Dev Services, configuración unificada
  • Nativo en Kubernetes: Diseñado para contenedores

Crear un proyecto Quarkus

# Usando CLI
quarkus create app com.example:my-service \
  --extension='resteasy-reactive-jackson,hibernate-orm-panache,jdbc-postgresql'

# O usando Maven
mvn io.quarkus.platform:quarkus-maven-plugin:create \
  -DprojectGroupId=com.example \
  -DprojectArtifactId=my-service

REST API con RESTEasy Reactive

@Path("/api/products")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ProductResource {

    @Inject
    ProductService productService;

    @GET
    public List<Product> list() {
        return productService.findAll();
    }

    @GET
    @Path("/{id}")
    public Product get(@PathParam("id") Long id) {
        return productService.findById(id)
            .orElseThrow(() -> new NotFoundException("Product not found"));
    }

    @POST
    @Transactional
    public Response create(Product product) {
        productService.persist(product);
        return Response.status(Status.CREATED)
            .entity(product)
            .build();
    }
}

Persistencia con Panache

@Entity
public class Product extends PanacheEntity {

    public String name;
    public String description;
    public BigDecimal price;

    // Métodos de consulta estáticos
    public static List<Product> findByName(String name) {
        return find("name like ?1", "%" + name + "%").list();
    }

    public static List<Product> findExpensive() {
        return find("price > ?1", new BigDecimal("100")).list();
    }
}

Configuración por entorno

# application.properties

# Desarrollo
%dev.quarkus.datasource.db-kind=h2
%dev.quarkus.datasource.jdbc.url=jdbc:h2:mem:devdb

# Producción
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=${DATABASE_URL}
%prod.quarkus.datasource.username=${DB_USER}
%prod.quarkus.datasource.password=${DB_PASSWORD}

Comunicación entre servicios

REST Client

@RegisterRestClient(configKey = "inventory-api")
@Path("/api/inventory")
public interface InventoryClient {

    @GET
    @Path("/{productId}")
    Inventory getStock(@PathParam("productId") Long productId);
}

// Uso
@Inject
@RestClient
InventoryClient inventoryClient;

Messaging con Kafka

@ApplicationScoped
public class OrderProcessor {

    @Incoming("orders")
    @Outgoing("confirmations")
    public Confirmation process(Order order) {
        // Procesar orden
        return new Confirmation(order.getId(), "PROCESSED");
    }
}

Health Checks y Métricas

@Liveness
@ApplicationScoped
public class LivenessCheck implements HealthCheck {

    @Override
    public HealthCheckResponse call() {
        return HealthCheckResponse.up("alive");
    }
}

@Readiness
@ApplicationScoped
public class ReadinessCheck implements HealthCheck {

    @Inject
    DataSource dataSource;

    @Override
    public HealthCheckResponse call() {
        try (Connection conn = dataSource.getConnection()) {
            return HealthCheckResponse.up("database");
        } catch (SQLException e) {
            return HealthCheckResponse.down("database");
        }
    }
}

Compilación nativa con GraalVM

# Compilar imagen nativa
./mvnw package -Pnative

# Ejecutar
./target/my-service-1.0.0-runner

# Tiempo de arranque: ~20ms
# Memoria: ~30MB

Dockerfile optimizado

FROM quay.io/quarkus/quarkus-micro-image:2.0

WORKDIR /work/
COPY target/*-runner /work/application

EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

Conclusión

Quarkus representa el futuro del desarrollo Java en la nube. Su eficiencia, velocidad y excelente experiencia de desarrollo lo convierten en la opción ideal para microservicios modernos.

¿Te gustó? ¡Compártelo!

Comentarios (0)

Cargando...