Um limite de serviço
Extraia o menor comportamento com owner e contrato de mensagem claros.
Fatia de ownershipUse workers independentes e mediação baseada em contratos para mover requests em processo para RabbitMQ, BullMQ ou outro transporte.

bun run pm2:start:dev:restapi
bun run pm2:start:staging:restapi
bun run pm2:start:prod:restapiDo zero ao primeiro MVP
Use este caminho quando o primeiro MVP já precisa de ownership independente ou uma capacidade background que não deve compartilhar o ciclo de vida da aplicação principal.
Escolha um contexto delimitado ou comportamento worker, como notificação de task, analytics de category ou import assíncrono.
Saída MVP: um limite de serviço com subject e payload claros.
export const TaskCreatedEvent = {
subject: 'tasks.created.v1',
example: {
id: 'task-1',
title: 'Notify assignee',
categoryId: 'work'
}
} as const;
export type TaskCreatedPayload = typeof TaskCreatedEvent.example;Escopo MVP
Extraia o menor comportamento com owner e contrato de mensagem claros.
Fatia de ownershipAdicione durabilidade de broker só após o contrato in-memory provar a interação.
Fatia de mensageriaRode testes e checks de deploy focados no limite extraído.
Fatia de governança| Área de prova | Pergunta a responder | Mecanismo Jumentix | Evidência MVP |
|---|---|---|---|
| Compatibilidade | Produtor e consumidor evoluem sem importar um ao outro? | Testes de contrato de mensagem e exemplos de subject/payload. | O contrato controla compatibilidade. |
| Isolamento | O serviço pode falhar sem esconder a falha? | Retry, contrato de erro, dead-letter ou evidência de fallback. | O modo de falha é explícito. |
| Ownership | Um time consegue publicar o serviço sozinho? | Perfil, testes e evidência de release por serviço. | Ownership independente é real, não teatro organizacional. |
Implementação prática
Estes exemplos mantêm Category e Task como vocabulário de produto e mostram controller, contrato, client, worker ou camada de estado necessários para chegar a um MVP executável.
export const TaskCreatedEvent = {
subject: 'tasks.created.v1',
example: {
id: 'task-1',
title: 'Notify assignee',
categoryId: 'work'
}
} as const;
export type TaskCreatedPayload = typeof TaskCreatedEvent.example;Continue explorando
Entregue serviços OpenAPI 3.1 com adaptadores HTTP nativos intercambiáveis.
Explore o blueprintExecute Socket.IO ou gRPC ao lado de fallback REST e documentação AsyncAPI.
Explore o blueprintLance um deploy com limites de domínio prontos para virar serviços.
Explore o blueprintMantenha a comunicação entre serviços baseada em contratos com o Message Mediator.
Explore o blueprintCrie produtos frontend que compartilham SDKs gerados e funcionam offline.
Explore o blueprintExplore o código, execute a fábrica localmente e transforme seu próximo serviço Node.js em uma capacidade repetível de plataforma.