• Stars
    star
    189
  • Rank 204,649 (Top 5 %)
  • Language
    C#
  • License
    Apache License 2.0
  • Created about 8 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An Hexagonal Architecture with DDD + Aggregates + Event Sourcing using .NET Core, Kafka e MongoDB (Blog Engine)

A solution based on a Event-Driven architecture with DDD and CQRS. The solution contains the following applications.

  • A Producer Web API which receives Commands to produce Domain Events. This one also receives Queries and returns JSON.
  • A Consumer Console App that reads the Event Stream and do a projection to a MongoDB database.
  • A Web API for authentication and JWT generation.

Checkout the Source Code on GitHub

Requirements

Environment setup

If you already have valid connections for Kafka and MongoDB you could skip this step and go to Running the applications step.

  • Run the ./up-kafka-mongodb.sh bash script to run Kafka and MongoDB as Docker Containers. Please wait until the ~800mb download to be complete.
$ ./up-kafka-mongodb.sh
Pulling mongodb (mongo:latest)...
latest: Pulling from library/mongo
Digest: sha256:2c55bcc870c269771aeade05fc3dd3657800540e0a48755876a1dc70db1e76d9
Status: Downloaded newer image for mongo:latest
Pulling kafka (spotify/kafka:latest)...
latest: Pulling from spotify/kafka
Digest: sha256:cf8f8f760b48a07fb99df24fab8201ec8b647634751e842b67103a25a388981b
Status: Downloaded newer image for spotify/kafka:latest
Creating setup_mongodb_1 ...
Creating setup_kafka_1 ...
Creating setup_mongodb_1
Creating setup_mongodb_1 ... done
  • Check if the data layer is ready with the following commands:
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mongo               latest              d22888af0ce0        17 hours ago        361MB
spotify/kafka       latest              a9e0a5b8b15e        11 months ago       443MB
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
32452776153f        spotify/kafka       "supervisord -n"         2 days ago          Up 2 days           0.0.0.0:2181->2181/tcp, 0.0.0.0:9092->9092/tcp   setup_kafka_1
ba28cf144478        mongo               "docker-entrypoint..."   2 days ago          Up 2 days           0.0.0.0:27017->27017/tcp                         setup_mongodb_1

If Kafka is running well it will be working with the 10.0.75.1:9092 connection string. if MongoDB is running well it will be working at mongodb://10.0.75.1:27017 connection string.

Running the applications

You have two options to run the applications, one is by opening with Visual Studio 2017 and the other is by running dotnet core commands.

Option 1 - Running with Visual Studio 2017

Open the three solutions on three Visual Studios them run the following projects.

  • Jambo.Auth.UI.
  • Jambo.Consumer.UI.
  • Jambo.Producer.UI.

Option 2 - Running with dotnet commands

How to run the Bearer Authencation API

  1. Run the command dotnet run at source\Auth\Jambo.Auth.UI folder.
$ dotnet run
Using launch settings from C:\git\jambo\source\Auth\Jambo.Auth.UI\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\git\jambo\source\Auth\Jambo.Auth.UI
Now listening on: http://localhost:16024
Application started. Press Ctrl+C to shut down.
  1. Navigate to the Swagger UI at (eg. http://localhost:16024/swagger).
  2. Post the following credentials:
{
  "username": "ivanpaulovich",
  "password": "mysecret"
}
  1. Store the Bearer Token because you will need the token value to log on Producer API.
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhYzA4MmE3OS1lMWY3LTQ4MTktYmU1Mi1hOTQwMTBkM2VjZTciLCJzdWIiOiJzdHJpbmciLCJleHAiOjE1MTI0Nzg5ODgsImlzcyI6Imh0dHA6Ly9teWFjY291bnRhcGkiLCJhdWQiOiJodHRwOi8vbXlhY2NvdW50YXBpIn0.9YKGmKaptLBDcExHhPOQ3_j9TsdbkcRf8ZtvIkdq8Go",
  "expiration": "2017-12-05T13:03:08Z"
}

How to run the Consumer API

  1. Run the command dotnet run at source\Consumer\Jambo.Consumer.UI folder
$ dotnet run
11/5/2017 11:17:20 AM Waiting for events..
11/5/2017 11:18:20 AM Waiting for events..
11/5/2017 11:19:20 AM Waiting for events..
11/5/2017 11:20:20 AM Waiting for events..
11/5/2017 11:21:20 AM Waiting for events..
11/5/2017 11:22:20 AM Waiting for events..
  1. Attention: keep the Console App running for events processing.

How to run the Producer API

Authorization

  1. Run the command dotnet run at the source\Producer\Jambo.Producer.UI folder.
$ dotnet run
Using launch settings from C:\git\jambo\source\Producer\Jambo.Producer.UI\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\git\jambo\source\Producer\Jambo.Producer.UI
Now listening on: http://localhost:16959
Application started. Press Ctrl+C to shut down.
  1. Navigate to the Swagger UI (eg. http://localhost:14398/swagger).

More Repositories

1

clean-architecture-manga

πŸŒ€ Clean Architecture with .NET6, C#10 and React+Redux. Use cases as central organizing structure, completely testable, decoupled from frameworks
C#
3,951
star
2

hexagonal-architecture-acerola

An Hexagonal Architecture service template with DDD, CQRS, TDD and SOLID using .NET Core 2.0. All small features are testable and could be mocked. Adapters could be mocked or exchanged.
C#
459
star
3

dotnet-new-caju

Learn Clean Architecture with .NET Core 3.0 πŸ”₯
C#
250
star
4

FluentMediator

πŸ”€ FluentMediator is an unobtrusive library that allows developers to build custom pipelines for Commands, Queries and Events.
C#
192
star
5

ddd-tdd-rich-domain-model-dojo-kata

DDD patterns implemented following TDD
C#
145
star
6

clean-architecture-webapi-ef-core

❀️ The simplest Clean Architecture demo on how to implement a Web Api using .NET Core and Entity Framework
C#
134
star
7

todo

βœ… Commad-Line Task management with storage on your GitHub πŸ”₯
C#
123
star
8

event-sourcing-castanha

An Event Sourcing service template with DDD, TDD and SOLID. It has High Cohesion and Loose Coupling, it's a good start for your next Microservice application.
C#
82
star
9

clean-architecture-video-tutorials

Live Streaming and Video Tutorials on Clean Architecture, DDD, TDD using .NET Core every week on Paulovich.NET Youtube channel.
C#
51
star
10

webapi-backgroundworker-rabbitmq

Sample implementation of a WebApi that publishes messages to RabbitMQ and consume them using a BackgroundWorker.
C#
25
star
11

clean-architecture-kata-dojo

⭐ Kata to learn Clean Architecture and Hexagonal Architecture styles, you start with two use cases already implemented and the final solution has six use cases. ⭐
C#
23
star
12

TechTalks

Download the high-resolution slides from my past talks to easy your learning into Clean Architecture.
23
star
13

amora-angular-app

An Angular App with Material Design and client of the Microservices Acerola and Manga
TypeScript
16
star
14

CleanArchitectureVSCodeSnippets

Clean Architecture C# Snippets for Visual Studio Code
TypeScript
10
star
15

mfa

DDD + Aggregates + Event Sourcing com .NET Core, Kafka e MongoDB (School Management)
C#
9
star
16

IdentityServer4Sample

C#
7
star
17

betsson-meetup-ddd-tdd

Building Rich Domain Models with DDD and TDD - Presentation
C#
7
star
18

MrRobot

A programmatically Cleaning Robot that informs the number of places cleaned after each execution.
C#
5
star
19

ivanpaulovich

Tech Lead, Software Engineer, 20+ GitHub projects about Clean Architecture, SOLID, DDD and TDD. Speaker/Streamer. Microsoft rMVP.
4
star
20

software-craftsmanship-study-plan

3
star
21

goat-ecs

Goat-ECS is an Entity-Component System with a friendly API to build objects with dynamic components.
C++
3
star
22

dotfiles

Shell
3
star
23

dotnet-new-on-the-web

Run dotnet new command on demand in an Web App
C#
2
star
24

tdd-practices

Practicing TDD
C#
1
star
25

openhackC4H

Classify Jobs description accordingly to a Natural Language then translate the results into Emoji!
C#
1
star
26

lapland

C#
1
star