SlideShare uma empresa Scribd logo
1 de 32
Lidando com fluxos complexos
com o uso de Sagas,
NServiceBus e RabbitMQ
Heber Ortiz Pereira
twitter.com/heberortiz
youtube.com/donetbr
fb.com/donetbr
github.com/heberop
• Arquiteto de Software @ Agile Content (UUX)
• Desenvolvedor (20 anos)
• Mágico amador
Revisitando - DDD
Domain Services
Implementa a lógica de domínio que não está
diretamente associada a uma agregação e geralmente
afeta várias entidades
Domain Services
Coordena a atividade de agregações e repositórios com
o propósito de implementar uma ação de negócio
Domain Services
Pode consumir serviços de infraestrutura, como enviar
emails
Domain Services
As ações de um domain service vem dos requirements e
são aprovados pelo domain expert
linguagem ubíqua
Eventos
O código não precisa ficar em um único
lugar
O disparo do evento é totalmente
desacoplado do tratamento do evento
Vários tratamentos (handlers) para o
mesmo evento em vários lugares
Um evento é uma classe
Disparando o Evento
Bus
Parte da infraestrutura
Notifica os listeners do evento
Bastante flexível
Pode gravar os eventos
Pode ter vários handlers
BUS
Bus
MassTransit
Rebus
NServiceBus
BUS
NServiceBus
Transporte
RabbitMQ
Azure Service Bus
MSMQ
SQL Server
Persistencia
RavenDB
Nhibernate
Azure Storage
RabbitMQ
Message Broker
Advanced Message Queuing Protocol
(AMQP)
Open Source
https://www.rabbitmq.com/
Arquiteturas
Clássica
•Command
•&
•Query
Domain
Layer
Nova
Command
Stack
Domain
Layer
Query
Stack
DTO
+
Data
Access
Boa para comandos
Precisa de ajustes para persistência
Expõe comportamento na presentation layer
Boa para queries
Não possui regras de negócio
Risco de estar em estado inválido
Presentation layer
Application layer
Infrastructure layer
Domain layer
Presentation layer
Infrastructure layer
Domain layer
Application
layer Data Access
+
DTO
commands queries
Arquitetura em Camadas CQRS
Benefícios
Simplificação do design
Potencial para escala aprimorada
Bancos Separados?
Sincronização
Mensagens
Mensagens
Mensagens
Handlers
Saga
“Saga é um componente lógico no qual desenvolvedores
destilam peças de lógica de negócios. Mais
precisamente, a saga (em cooperação com o bus)
orquestra todas as tarefas que precisam ser realizadas
para implementar um caso de uso”
Dino Esposito, Architecting Applications for the Enterprise
Saga
•Pode ser um Guid
•Pode ser o ID da agregação da qual se trata a saga
•Pode ser uma combinação de valores que é único no contexto
Sagas precisam ser identificadas por
um único ID
•Persistência é responsabilidade do Bus
•Estado de agregações associadas devem ser persistidas
Sagas podem ser persistidas
•Mero executor de tarefas obtendo qualquer dado do
comando que inicia a sagaSagas podem ser stateless
Como estender a solução?
Escreva uma nova Saga
Escreva um novo Handler
Registre no Bus
Referências
Architecting Applications for the
Enterprise, Dino Esposito
Patterns, Principles, and Practices of
Domain-Driven Design, Scott Millett
Pluralsight
Scaling Applications with Microservices,
MassTransit, and RabbitMQ
Scaling Applications with Microservices
and NServiceBus
Dúvidas?
twitter.com/heberortiz
youtube.com/donetbr
fb.com/donetbr
github.com/heberop
bit.ly/uux-vagas

Mais conteúdo relacionado

Semelhante a Lidando com fluxos complexos usando Sagas

Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS - ARC201 - ...
Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS -  ARC201 - ...Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS -  ARC201 - ...
Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS - ARC201 - ...Amazon Web Services
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Renato Groffe
 
Microsoft Connect(); Brasil Azure blockchain
Microsoft Connect(); Brasil Azure blockchainMicrosoft Connect(); Brasil Azure blockchain
Microsoft Connect(); Brasil Azure blockchainRogério Rodrigues
 
Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Marcus Garcia
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareDanilo Sousa
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKRyan Padilha
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRElvis Rocha
 
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...Renato Groff
 
Cloud Computing com Windows Azure
Cloud Computing com Windows AzureCloud Computing com Windows Azure
Cloud Computing com Windows AzureMarcelo Paiva
 
Jornal java por dentro da nuvem
Jornal java por dentro da nuvemJornal java por dentro da nuvem
Jornal java por dentro da nuvemjornaljava
 
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso SalesforceCloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso SalesforceFernando Carvalho
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixNatanael Fonseca
 
Arquitetura Serverless na AWS
Arquitetura Serverless na AWSArquitetura Serverless na AWS
Arquitetura Serverless na AWSStefan Horochovec
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Amazon Web Services LATAM
 

Semelhante a Lidando com fluxos complexos usando Sagas (20)

Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS - ARC201 - ...
Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS -  ARC201 - ...Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS -  ARC201 - ...
Arquiteturas e Estratégias para Criar Aplicações Modernas na AWS - ARC201 - ...
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
 
Microsoft Connect(); Brasil Azure blockchain
Microsoft Connect(); Brasil Azure blockchainMicrosoft Connect(); Brasil Azure blockchain
Microsoft Connect(); Brasil Azure blockchain
 
Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1)
 
Projetando aplicações para a nuvem
Projetando aplicações para a nuvemProjetando aplicações para a nuvem
Projetando aplicações para a nuvem
 
Ferramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de SoftwareFerramenta de Cloud Computer para apoio à Engenharia de Software
Ferramenta de Cloud Computer para apoio à Engenharia de Software
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 
Arquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXIArquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXI
 
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BRJBoss Fuse Service Works - O Fuse além da integração - PT-BR
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
 
DDD e Restful SOA
DDD e Restful SOADDD e Restful SOA
DDD e Restful SOA
 
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
 
Microserviços
MicroserviçosMicroserviços
Microserviços
 
Cloud Computing com Windows Azure
Cloud Computing com Windows AzureCloud Computing com Windows Azure
Cloud Computing com Windows Azure
 
Jornal java por dentro da nuvem
Jornal java por dentro da nuvemJornal java por dentro da nuvem
Jornal java por dentro da nuvem
 
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso SalesforceCloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Arquitetura Serverless na AWS
Arquitetura Serverless na AWSArquitetura Serverless na AWS
Arquitetura Serverless na AWS
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
 

Lidando com fluxos complexos usando Sagas