dotnet-microservices-boilerplate
dotnet-microservices-boilerplate copied to clipboard
The Ultimate Microservices Starter Kit for .NET Developers!
.NET Microservices Boilerplate
The goal is to build a framework that can make building microservices in .NET easy for developers. This project follows Vertical Slice Architecture along with other latest best practices and tools like CQRS, NoSQL, SQL, MediatR, Serilog, FluentValidations and more.🚀
Table of Contents
- .NET Microservices Boilerplate
- Table of Contents
- Goals
- FluentPos
- How to Run ?
- Tye
- Docker & Docker-Compose
- Technologies & Libraries
- Documentation
- Changelogs
- Community
- License
- Support ⭐
- Code Contributors
- Financial Contributors
Goals
- :sparkle: Using
Vertical Slice Architecturefor architecture level. - :sparkle: Using
Domain Driven Design (DDD)to implement all business processes in microservices. - :sparkle: Using
Rabbitmqon top ofMassTranitforEvent Driven Architecturebetween our microservices. - :sparkle: Using
CQRSimplementation withMediatRlibrary. - :sparkle: Using
Entity Framework Corefor some microservices. - :sparkle: Using
MongoDBfor some microservices. - :sparkle: Using
Fluent Validationand aValidation Pipeline Behaviouron top ofMediatR. - :sparkle: Using
Minimal APIfor all endpoints. - :sparkle: Using
Health Checkfor reporting the health of app infrastructure components. - :sparkle: Using
Tyefor local development and debugging. - :sparkle: Using
Built-In ContainerizationforDockerimages. - :sparkle: Using
Zipkinfor distributed tracing. - :sparkle: Using
OpenIddictfor authentication and authorization base onOpenID-ConnectandOAuth2. - :sparkle: Using
Yarpas a microservices gateway.
FluentPos
FluentPos is a sample project that consumes the microservice framework. You will learn a lot by exploring this project, which is located under the ./fluentpos folder.
| Services | Status |
|---|---|
| Gateway | Completed ✔️ |
| Identity | Completed ✔️ |
| Catalog | Completed ✔️ |
| Cart | WIP 🚧 |
| People | WIP 🚧 |
| Ordering | WIP 🚧 |
| Payment | WIP 🚧 |
How to Run ?
Tye
Tye is a super-awesome way to run your applications quickly. The fluentpos project already has this support. Simply run the following at the ./fluentpos directory :
make tye
That's it!
This will spin up all the services required.
- Gateway will be available on
https://localhost:7002. - Identity Service will be available on
https://localhost:7001. - Catalog Service will be available on
https://localhost:7003.
To Test these APIs, you can use open up Visual Code from the ./fluentpos directory, install the Thunder Client extension. I have already included the required Test collections at ./fluentpos/thunder-tests.
You can find the specification of services under the ./fluentpos/tye.yaml file.
Docker & Docker-Compose
The fluentpos project comes included with the required docker-compose.yaml and makefile file for your reference.
There are some prerequisites for using these included docker-compose.yml files:
-
Make sure you have docker installed (on windows install docker desktop)
-
Create and install an https certificate:
dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\cert.pfx -p password!Note that the certificate name and password should match the ones that are mentioned in the docker-compose.yaml file.
-
It's possible that the above step gives you an
A valid HTTPS certificate is already presenterror. In that case you will have to run the following command, and thenRe-Run Step #2.dotnet dev-certs https --clean -
Trust the certificate
dotnet dev-certs https --trust
Once your certificate is trusted, simply navigate into the ./fluentpos folder of the project and run the following command.
make docker-up
This will spin up all the containers required. Your Gateway URL will be available on https://localhost:7002.
To bring down all the fluentpos container, simply run the following.
make docker-down
Note that the default Docker Images that will be pulled are from my public Image Repository (for eg, iammukeshm/fluentpos.identity:latest). You can switch it your variants if required.
Technologies & Libraries
.NET 7- .NET Framework and .NET Core, including ASP.NET and ASP.NET CoreMVC Versioning API- Set of libraries which add service API versioning to ASP.NET Web API, OData with ASP.NET Web API, and ASP.NET CoreEF Core- Modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrationsMediatR- Simple, unambitious mediator implementation in .NET.FluentValidation- Popular .NET validation library for building strongly-typed validation rulesSwagger & Swagger UI- Swagger tools for documenting API's built on ASP.NET CoreSerilog- Simple .NET logging with fully-structured eventsOpenIddict- OpenIddict aims at providing a versatile solution to implement OpenID Connect client, server and token validation support.Mapster- Convention-based object-object mapper in .NET.Yarp- Reverse proxy toolkit for building fast proxy servers in .NETTye- Developer tool that makes developing, testing, and deploying microservices and distributed applications easier.MongoDB.Driver- .NET Driver for MongoDB.
Documentation
Read Documentation related to this Boilerplate here - https://fullstackhero.net/dotnet-microservices-boilerplate/
Feel free to contribute to the Documentation Repository - https://github.com/fullstackhero/docs Docs are not yet updated.
Changelogs
Community
- Discord @fullstackhero
- Facebook Page @codewithmukesh
- Youtube Channel @codewithmukesh
License
This project is licensed with the MIT license.
Support ⭐
Has this Project helped you learn something New? or Helped you at work? Here are a few ways by which you can support.
- Leave a star! ⭐
- Recommend this awesome project to your colleagues. 🥇
- Do consider endorsing me on LinkedIn for ASP.NET Core - Connect via LinkedIn 🦸
- Sponsor the project - opencollective/fullstackhero ❤️
- Or, consider buying me a coffee! ☕
Code Contributors
This project exists thanks to all the people who contribute. Submit your PR and join the elite list!
Financial Contributors
Become a financial contributor and help me sustain the project. Support the Project!