A full-stack .NET microservices build on Dapr and Tye

A full-stack .NET microservices build on Dapr and Tye

CoolStore Website is a containerised microservices application consisting of services based on .NET Core running on Dapr. It demonstrates how to wire up small microservices into a larger application using microservice architectural principals.

CoolStore Web Application - 🎡 Modern Application on Dapr and Tye ⛵

CoolStore Website is a containerised microservices application consisting of services based on .NET Core running on Dapr. It demonstrates how to wire up small microservices into a larger application using microservice architectural principals.

Read documentation for more information.

The business domain is inspired from CoolStore project by JBoss Demo Central and Red Hat Demo Central.

Check out my medium, or my dev.to or say hi on Twitter!

Table of contents

Dapr Building Blocks

Name Usecase Apps Participants
Service-to-service invocation - User clicks to the detail product
  • Populate product information for shopping cart items
  • Order gets detail information of buyer | productcatalogapp, inventoryapp, shoppingcartapp, identityapp | | State management | Items in the shopping cart | shoppingcartapp | | Publish and subscribe | User clicks checkout button, and the checkout process happens. It triggers the pub/sub flow in the system | shoppingcartapp, saleapp, identityapp | | Resource bindings | Every 30 seconds and 1 minutes the validation process happens. It will change the status of order from Received to Process and Complete via Cron binding | productcatalogapp, inventoryapp | | Observability | All apps in the application are injected by daprd so that it's tracked and observed by dapr | identityapp, webapigatewayapp, inventoryapp, productcatalogapp, shoppingcartapp, saleapp, web | | Secrets | Bind with local secret file to hide password of redis | inventoryapp, productcatalogapp, shoppingcartapp, saleapp | | Actors | N/A | N/A |

Screenshots

Home page

home-page

Shopping Cart page

cart-page

Order page

order-page

Try it

Make sure you have dapr and tye installed on your machine!

Only wanna see wth is it?

$ tye run

Go to http://localhost:8000, and you're able to access to several endpoints whenevever it's ready as below:

Wanna go deeply to see how can we built it!

  1. Start core components
$ tye run tye.slim.yaml
  1. Start dapr apps locally via dapr cli
$ dapr run --app-port 5001 --app-id identityapp dotnet run -- -p src\Services\Identity\IdentityService\IdentityService.csproj
$ dapr run --app-port 5002 --app-id inventoryapp dotnet run -- -p src\Services\Inventory\InventoryService.Api\InventoryService.Api.csproj
$ dapr run --app-port 5003 --app-id productcatalogapp dotnet run -- -p src\Services\ProductCatalog\ProductCatalogService.Api\ProductCatalogService.Api.csproj
$ dapr run --app-port 5004 --app-id shoppingcartapp dotnet run -- -p src\Services\ShoppingCart\ShoppingCartService.Api\ShoppingCartService.Api.csproj

Now, you can start to develop, debug or explore more about dapr with tye via Coolstore Apps.

Enable vm.max_map_count for ElasticSearch via run sysctl -w vm.max_map_count=262144

OS, SDK, library, tooling and prerequisites

Infrastructure

  • Windows 10 - The OS for developing and building this demo application.
  • WSL2 - Ubuntu OS - the subsystem that helps to run easily the bash shell on Windows OS
  • Docker for desktop (Kubernetes enabled) - The easiest tool to run Docker, Docker Swarm and Kubernetes on Mac and Windows
  • Kubernetes / AKS - The app is designed to run on Kubernetes (both locally on "Docker for Desktop" as well as on the cloud with AKS)
  • helm - Best package manager to find, share, and use software built for Kubernetes
  • dapr - An event-driven, portable runtime for building microservices on cloud and edge
  • tye - A developer tool that makes developing, testing, and deploying microservices and distributed applications easier

Back-end

  • .NET Core 5 - .NET Framework and .NET Core, including ASP.NET and ASP.NET Core
  • IdentityServer4 - Identity and Access Control solution for .NET Core
  • YARP - A toolkit for developing high-performance HTTP reverse proxy applications
  • FluentValidation - Popular .NET validation library for building strongly-typed validation rules
  • MediatR - Simple, unambitious mediator implementation in .NET
  • EF Core - Modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations
  • Scrutor - Assembly scanning and decoration extensions for Microsoft.Extensions.DependencyInjection
  • serilog - Simple .NET logging with fully-structured events
  • NEST - Elasticsearch.Net & NEST

Front-end

  • nodejs 10.x - JavaScript runtime built on Chrome's V8 JavaScript engine
  • typescript - A typed superset of JavaScript that compiles to plain JavaScript
  • create-react-app - A modern web app by running one command

µService development

Guidance for developing µService can be found at Clean Domain-Driven Design in 10 minutes

µService Screenshot

Open API

OpenAPI Screenshot

https://documenter.getpostman.com/view/4847807/SVmvUeZv?version=latest#9f5ed7e4-e855-46e5-a42d-64edb31bc1cb

CI/CD

Lift and Shift

Debug and Tracing Apps

  • Setup Kibana with TraceId, HandlerName, RequestPath, level and filter with HandlerName

Then, you can find the exception happend in code via Kibana dashboard with settings above. Grab the TraceId, then paste it to Zipkin dashboard, then you can see the tracing of this request as the following picture

Public presentation

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :p

Download Details:

Author: vietnam-devs

Demo: https://vietnam-devs.github.io/coolstore-microservices/

Source Code: https://github.com/vietnam-devs/coolstore-microservices

.net programming net

Bootstrap 5 Complete Course with Examples

Bootstrap 5 Tutorial - Bootstrap 5 Crash Course for Beginners

Nest.JS Tutorial for Beginners

Hello Vue 3: A First Look at Vue 3 and the Composition API

Building a simple Applications with Vue 3

Deno Crash Course: Explore Deno and Create a full REST API with Deno

How to Build a Real-time Chat App with Deno and WebSockets

Convert HTML to Markdown Online

HTML entity encoder decoder Online

jQuery Ajax CRUD in ASP.NET Core MVC with Modal Popup

In this article, we’ll discuss how to use jQuery Ajax for ASP.NET Core MVC CRUD Operations using Bootstrap Modal. With jQuery Ajax, we can make HTTP request to controller action methods without reloading the entire page, like a single page application.

.NET Core .NET Framework|teratail

前提・実現したいこと.NET Coreから.NET Frameworkへの移植 発生している問題・エラーメッセージ「.NET Framework」から「.NET Core」の移植方法については方法が見つかったのですがその逆はなかなか見つからず。。。

Announcing .NET 5 Preview 4 and our journey to one .NET | .NET Blog

.NET 5 is the next version and future of .NET. We are continuing the journey of unifying the .NET platform, with a single framework that extends from cloud to desktop to mobile and beyond. Looking back, we took the best of .NET Framework and put that into .NET Core 3,

Stack Overflowがアーキテクチャを.NET Frameworkから.NET Coreに移行

Stack Overflowは先頃、.NET Frameworkから.NET Coreへのシステムアーキテクチャ移行を完了した。このプラットフォームはStack Overflowだけではなく、170を越えるQ&Aコミュニティ、さらには企業のプライベートQ&Aサイトも支えている。

ML.NET Model Builder is now a part of Visual Studio | .NET Blog

ML.NET is a cross-platform, machine learning framework for .NET developers. Model Builder is the UI tooling in Visual Studio that uses Automated Machine Learning (AutoML) to train and consume custom ML.NET models in your .NET apps. You can use ML.NET and Model Builder to create custom machine learning models without having prior machine learning experience and without leaving the .NET ecosystem.