Git Product home page Git Product logo

jambo's Introduction

Neste projeto experimental em Domain-Driven-Design com implementação de Aggregates + Event Sourcing + CQRS + Optimistic Concurrency, a técnica de Event Sourcing é usada como ferramenta de auditoria das modificações do conteúdo do Blog. A fonte dos dados são os Domain Events registrados no Kafka e para permitir consultas de alta performance foi criado um banco de dados MongoDB com o 'último estado já processado dos eventos'. Há um microsserviço auxiliar de autenticação. Tudo isso foi implementado em .NET Core/Standard 2.0 compatível com Docker! Divirta-se!

O Domínio

Domain

As Aplicações desta Solução

  • Producer: Web API que recebe os comandos de edição de conteúdo, produz Eventos de Domínio e publica as mensagens em um tópico no Kafka.
  • Consumer: Aplicativo Console que consome as mensagens do Kafka, deserializa em Eventos de Domínio e aplica nas agregações persistindo no MongoDB o novo estado.
  • Auth: Web API que gera tokens de autenticação para acesso ao WebAPI.

Por onde começar?

Há duas formas de iniciar a solução.

1. O jeito fácil

Resolver os pré-requisitos, definir o projeto inicial como sendo o docker-compose e então apertar Ctrl+F5 para executar todas as aplicações. Se tudo estiver correto, digite docker ps no seu terminal para verificar em quais portas cada aplicação está executando. Será algo assim:

Enviando comandos

A partir daí basta acessar:

Leia o o jeito não tão fácil para entender como criar um Token no Auth API para consumir os serviços do Producer API via swagger.

2. O jeito não tão fácil

A outra opção é inicializar aplicação por aplicação, seguindo o seguintes passos:

  1. Execute o projeto Jambo.Auth.WebAPI e chame o método Account/Token com qualquer usuário e senha. Guarde este token.

Auth

Auth com Token

  1. Execute o projeto Jambo.Producer.WebAPI e clique no botão Authorization (topo direito da página).

Digite bearer + valor_do_token e clique em fechar. Algo assim: Autorizando Chame os métodos para manutenção dos dados do Blog, Posts e Comentários. Enviando comandos

  1. Execute o projeto Jambo.Consumer.Console e garante que ele contínua em execução.

Comsumer em execução

  1. Visualize suas modificações

Queries

Demo

Próximos passos?

  1. Publicar os containers no Azure.
  2. Criar um CI/CD para atualizar os containers a cada commit.
  3. Criar testes de unidade, testes automatizados.
  4. Consumir serviços externos.
  5. Implementação alternativa de barramento: Azure Event Hubs
  6. Implementação alternativa de snapshot: Azure Cosmos DB
  7. Implementar um HealthCheck

Pré-requisitos

Agradecimentos

Obrigado aos amigos que me estimularam a criar este projeto e estão sempre contribuindo e dando feedback.

Obrigado de verdade!

Deixe o seu feedback

Agradeço todo comentário sobre o projeto. Envie suas dúvidas e sugestões no Fórum.

Histórico de Versões

  • 10/set/2017: release

jambo's People

Contributors

ivanpaulovich avatar

Watchers

Rodrigo Vieira Baía avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.