quarkus-patterns
Quarkus 3.x LTS architecture patterns with Camel for messaging, RESTful API design, CDI services, data access with Panache, and async processing. Use for Java Quarkus backend work with event-driven architectures. Use when building or reviewing a Quarkus service, especially with Camel messaging or Pa
By affaan-m · 2,807 installs
npx skills add affaan-m/ecc --skill quarkus-patterns
Source repository · Upstream listing
Quarkus Development Patterns
Quarkus 3.x architecture and API patterns for cloud native, event driven services with Apache Camel.
When to Activate
Building REST APIs with JAX RS or RESTEasy Reactive
Structuring resource → service → repository layers
Implementing event driven patterns with Apache Camel and RabbitMQ
Configuring Hibernate Panache, caching, or reactive streams
Adding validation, exception mapping, or pagination
Setting up profiles for dev/staging/production environments (YAML config)
Custom logging with LogContext and Logback/Logstash encoder
Working with CompletableFuture for async operations
Implementing conditional flow processing
Working with GraalVM native compilation
Service Layer with Multiple Dependencies
Key Patterns:
@RequiredArgsConstructor for constructor injection via Lombok
@Slf4j for Logback logging
@Transactional on service methods that write through Panache or repositories
Validate input before persistence or message publication
Event tracking for success/error scenarios
Async Camel message publishing
Custom Logging Context Pattern (Logback)
Logback Configuration (logback.xml):
Event Service Pattern
Camel Message Publishing (RabbitMQ)
Camel Route Configuration:
Camel Direct Routes (In Memory)
Camel File Processing
Camel Bean Invocation
REST API Structure
Repository Pattern (Panache Repository)
Service Layer with Transactions
DTOs and Validation
Exception Mapping
CompletableFuture Async Operations
Caching
Configuration as YAML
Health Checks
Dependencies (Maven)
Best Practices
Architecture
Use @RequiredArgsConstructor with Lombok for constructor injection
Keep service layer thin; delegate complex logic to specialized classes
Use Camel routes for message routing and integration patterns
Prefer Panache Repository pattern for data access
Event Driven
Always track operations with EventService (success/error events)
Use Camel direct: endpoints for in memory routing
Use spring rabbitmq component for RabbitMQ integration
Implement async publishing with ProducerTemplate.asyncSendBody()
Logging
Use Logback with Logstash encoder for structured logging
Propagate LogContext through service calls with SafeAutoCloseable
Add contextual information to LogContext for request tracing
Use @Slf4j instead of manual logger instantiation
Async Operations
Use CompletableFuture for non blocking I/O operations
Call .join() when you need to wait for completion
Handle exceptions from CompletableFuture properly
Pass LogContext to async operations for tracing
Configuration
Use YAML configuration ( quarkus config yaml )
Profile aware configuration for dev/test/prod environments
Externalize sensitive configuration to environment variables
Use @ConfigProperty for type safe config injection
Validation
Validate at resource layer with @Valid
Use Bean Validation annotations on DTOs
Map exceptions to proper HTTP responses with @Provider
Transactions
Use @Transactional on service methods that modify data
Keep transactions short and focused
Avoid calling async operations within transactions
Testing
Use camel quarkus junit5 for route testing
Use AssertJ for assertions
Mock all external dependencies
Test conditional flow logic thoroughly
Quarkus Specific
Stay on latest LTS version (3.x)
Use Quarkus dev mode for hot reload
Add health checks for production readiness
Test native compilation compatibility periodically