Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #106

quarkus-patterns

Faz seu agente construir aplicações backend com Quarkus. Ele usa padrões modernos para criar serviços eficientes, lidar com mensagens e acessar dados de forma organizada.

O que ela faz

Este é um guia de padrões para construir aplicações em Java usando Quarkus. Ele mostra como organizar o código, lidar com mensagens e dados, e registrar informações importantes.

Quando usar

  • ✓Ao começar um novo projeto com Quarkus.
  • ✓Ao revisar o código de uma aplicação Quarkus existente.
  • ✓Quando precisar de exemplos de como conectar diferentes partes da aplicação.

Exemplo do que pedir para a IA

“Como eu organizo o código para processar pedidos e registrar o que aconteceu?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/quarkus-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/quarkus-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele fornece exemplos de código e explica os padrões usados, como organizar camadas (recursos, serviços, repositórios) e como registrar eventos importantes.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill quarkus-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/quarkus-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Desenvolvimento Quarkus

Arquitetura e padrões de API do Quarkus 3.x para serviços nativos da nuvem e orientados a eventos com Apache Camel.

Quando Ativar

  • Construindo APIs REST com JAX-RS ou RESTEasy Reactive
  • Estruturando camadas de recurso → serviço → repositório
  • Implementando padrões orientados a eventos com Apache Camel e RabbitMQ
  • Configurando Hibernate Panache, cache ou fluxos reativos
  • Adicionando validação, mapeamento de exceções ou paginação
  • Configurando perfis para ambientes de desenvolvimento/staging/produção (configuração YAML)
  • Log personalizado com LogContext e codificador Logback/Logstash
  • Trabalhando com CompletableFuture para operações assíncronas
  • Implementando processamento de fluxo condicional
  • Trabalhando com compilação nativa GraalVM

Camada de Serviço com Múltiplas Dependências

@Slf4j
@ApplicationScoped
@RequiredArgsConstructor
public class OrderProcessingService {

    private final OrderValidator orderValidator;
    private final EventService eventService;
    private final OrderRepository orderRepository;
    private final FulfillmentPublisher fulfillmentPublisher;
    private final AuditPublisher auditPublisher;

    @Transactional
    public OrderReceipt process(CreateOrderCommand command) {
        ValidationResult validation = orderValidator.validate(command);
        if (!validation.valid()) {
            eventService.createErrorEvent(command, "ORDER_REJECTED", validation.message());
            throw new WebApplicationException(validation.message(), Response.Status.BAD_REQUEST);
        }

        Order order = Order.from(command);
        orderRepository.persist(order);

        OrderReceipt receipt = OrderReceipt.from(order);
        fulfillmentPublisher.publishAsync(receipt);
        auditPublisher.publish("ORDER_ACCEPTED", receipt);
        eventService.createSuccessEvent(receipt, "ORDER_ACCEPTED");

        log.info("Processed order {}", order.id);
        return receipt;
    }
}

Padrões Chave:

  • @RequiredArgsConstructor para injeção de construtor via Lombok
  • @Slf4j para logging com Logback
  • @Transactional em métodos de serviço que escrevem através do Panache ou repositórios
  • Valide a entrada antes da persistência ou publicação de mensagens
  • Rastreamento de eventos para cenários de sucesso/erro
  • Publicação assíncrona de mensagens Camel

Padrão de Contexto de Log Personalizado (Logback)

@ApplicationScoped
public class ProcessingService {

    public void processDocument(Document doc) {
        LogContext logContext = CustomLog.getCurrentContext();
        try (SafeAutoCloseable ignored = CustomLog.startScope(logContext)) {
            // Add context to all log statements
            logContext.put("documentId", doc.getId().toString());
            logContext.put("documentType", doc.getType());
            logContext.put("userId", SecurityContext.getUserId());

            log.info("Starting document processing");

            // All logs within this scope inherit the context
            processInternal(doc);

            log.info("Document processing completed");
        } catch (Exception e) {
            log.error("Document processing failed", e);
            throw e;
        }
    }
}

Configuração do Logback (logback.xml):

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <includeContext>true</includeContext>
            <includeMdc>true</includeMdc>
        </encoder>
    </appender>

    <logger name="com.example" level="INFO"/>
    <root level="WARN">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

Padrão de Serviço de Eventos

@Slf4j
@ApplicationScoped
@RequiredArgsConstructor
public class EventService {
    private final EventRepository eventRepository;
    private final ObjectMapper objectMapper;

    public void createSuccessEvent(Object payload, String eventType) {
        Objects.requireNonNull(payload, "Payload cannot be null");
        Event event = new Event();
        event.setType(eventType);
        event.setStatus(EventStatus.SUCCESS);
        event.setPayload(serializePayload(payload));
        event.setTimestamp(Instant.now());

        eventRepository.persist(event);
        log.info("Success event created: {}", eventType);
    }

    public void createErrorEvent(Object payload, String eventType, String errorMessage) {
        Objects.requireNonNull(payload, "Payload cannot be null");
        if (errorMessage == null || errorMessage.isBlank()) {

…
Perguntas frequentes

O que é Quarkus?

Quarkus é um framework para criar aplicações Java rápidas e eficientes, especialmente para ambientes na nuvem.

O que são 'padrões de arquitetura'?

São soluções comprovadas para problemas comuns no desenvolvimento de software, ajudando a criar código mais organizado e fácil de manter.

O que é Camel?

Apache Camel é uma ferramenta que ajuda a conectar diferentes sistemas e a gerenciar o fluxo de mensagens entre eles.

Detalhes

Descrição original do autor

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 Panache data access.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#106
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas