Xin chào mọi người, tôi là Trương Phi Hồng. Cảm ơn bạn đã đọc bài viết này. Tôi sẽ thường xuyên chia sẻ những kinh nghiệm học tập của mình, hy vọng rằng các bài viết của tôi có thể trở thành bước đệm giúp bạn tiến bộ hơn. Cùng nhau chúng ta hãy nâng cao kỹ năng nhé.
Bài viết này là phần thứ hai trong chuỗi "Thực hành microservices với Dapr và .NET 6.0", bao gồm: tìm hiểu về Dapr, khám phá các thành phần cốt lõi của Dapr, thiết lập môi trường Dapr, xây dựng ví dụ đơn giản với Dapr. Bắt đầu hành trình series này ngay bây giờ.
Giới thiệu ngắn gọn
Dapr là viết tắt của Distributed Application Runtime, dịch sang tiếng Việt là thời gian chạy ứng dụng phân tán. Sau khi phát hành phiên bản v1.0, Dapr đã phát triển mạnh mẽ.
Chương này giới thiệu các khái niệm cốt lõi trong kiến trúc Dapr, chuẩn bị cho việc sử dụng Dapr trong quá trình phát triển.
Nói cách khác, Dapr giúp tăng tốc độ phát triển ứng dụng cloud-native mới và đơn giản hóa việc sử dụng kiến trúc microservices.
Trong chương này, chúng ta sẽ thảo luận các chủ đề sau:
- Tìm hiểu sơ lược về Dapr
- Khám phá các thành phần cốt lõi của Dapr
- Thiết lập môi trường Dapr
- Xây dựng ví dụ Dapr
Những chủ đề này là nền tảng lý thuyết cho việc sử dụng Dapr và kiến trúc microservices sau này. Trước tiên, chúng ta bắt đầu từ bước đầu tiên: nguyên lý hoạt động của Dapr.
1. Tìm hiểu sơ lược về Dapr
Dapr là một runtime có thể di chuyển, được tạo bởi Microsoft với phương pháp mã nguồn mở, và đang được hỗ trợ bởi Cloud Native Computing Foundation (CNCF).
Động lực sự kiện (được nhấn mạnh trong định nghĩa của Dapr) đóng vai trò quan trọng trong microservices; phản hồi lại các sự kiện từ hệ thống bên ngoài hoặc các bên thứ ba và có thể chuyển tiếp sự kiện mới đến các dịch vụ khác.
Dapr có tính di chuyển, nó có ba chế độ quản lý. Đầu tiên, nó có thể tự quản lý trên máy cục bộ, cũng có thể triển khai lên edge hoặc chạy trên Kubernetes.
Hình dưới đây cho thấy nhiều khối xây dựng mà Dapr cung cấp:

Từ hình ảnh trên có thể thấy, Dapr hoạt động tốt trên các nền tảng như Microsoft Azure, Amazon (AWS), Google Cloud hoặc các nền tảng nội địa như Alibaba, Huawei Cloud.
Dapr được xây dựng dựa trên kinh nghiệm phát triển các ứng dụng cloud-native quy mô lớn của Microsoft. Nó lấy cảm hứng từ Orleans và Service Fabric (mesh dịch vụ), đồng thời cũng đóng góp vào việc sử dụng quy mô lớn trên nền tảng đám mây của Microsoft.
1.1 Lịch sử phát triển của Dapr
Dapr được phát hành lần đầu vào tháng 10 năm 2019, bạn có thể tìm hiểu thêm tại đây.
Vào tháng 9 năm 2020, Dapr đã áp dụng mô hình quản lý mở trong giai đoạn phát triển ban đầu; xem mô tả bên dưới.
Vào tháng 2 năm 2021, Dapr phát hành phiên bản v1.0 dành cho sản xuất, xem chi tiết tại đây. Vào tháng 11 năm 2021, Dapr trở thành dự án được CNCF hỗ trợ; xem thông báo.
Dapr cung cấp cho các nhà phát triển công cụ thiết kế và runtime hướng tới kiến trúc microservices để vận hành ứng dụng tốt hơn.
Microservices mang lại nhiều lợi ích như khả năng sẵn sàng cao, xử lý song song hiệu quả, nhưng cũng đồng thời tạo ra độ phức tạp tương ứng, như cắt đứt, hạn chế lưu lượng, giám sát gọi dịch vụ, cân bằng tải, v.v., điều này thường gây gánh nặng cho nhóm phát triển.
Runtime Dapr giúp đơn giản hóa các thao tác phức tạp này. Hãy xem cụ thể:

Người dùng có thể thấy rằng hai chế độ quản lý của Dapr: runtime Dapr chạy trong tiến trình sidecar, nâng cao phần phức tạp của ứng dụng lên một môi trường riêng biệt, điều này giúp đơn giản hóa phát triển và vận hành. Các tiến trình sidecar này chạy cục bộ trong môi trường phát triển hoặc trong container của Pod trong Kubernetes.
Từ góc nhìn ứng dụng, Dapr là một API có thể truy cập trực tiếp qua HTTP hoặc gRPC, hoặc đơn giản hơn, thông qua bất kỳ SDK nào phù hợp với các ngôn ngữ như .NET, Java, Go, Python, PHP, JavaScript, C++ và Rust.
Rất dễ dàng để không cần sử dụng SDK Dapr, các yêu cầu tới dịch vụ Dapr có thể giống như các cuộc gọi HTTP đơn giản, ví dụ: http://localhost:3500/v1.0/invoke/<app-id>/method/<methodname>. Nếu bạn tương tác với Dapr thông qua SDK, hoặc sử dụng Actor SDK để tận dụng mô hình Actor của Dapr, thì việc sử dụng SDK sẽ mang lại nhiều lợi ích.
Bạn có thể tìm hiểu thêm về SDK và ngôn ngữ được hỗ trợ trong tài liệu Dapr tại đây.
Chúng ta đã tìm hiểu kiến trúc của Dapr và biết Dapr là gì, bây giờ chúng ta sẽ làm rõ những điều mà Dapr không phải là gì.
1.2 Dapr không phải là gì
Chúng ta đã hiểu rõ về Dapr từ phía tích cực, có thể bạn rất tò mò, nhưng tôi nghĩ rất cần thiết phải hiểu toàn diện về Dapr để tránh hiểu nhầm, như sau:
- Dapr không ép buộc người phát triển phải tuân thủ mô hình lập trình nghiêm ngặt với các quy tắc và ràng buộc. Thay vào đó, mặc dù Dapr giúp giải phóng người phát triển khỏi độ phức tạp của kiến trúc microservices, nhưng họ vẫn không bị ràng buộc về cách viết ứng dụng. Ví dụ, việc quản lý kết nối cơ sở dữ liệu trạng thái là trách nhiệm của Dapr (sẽ thấy rõ hơn trong phần quản lý trạng thái), điều này là minh bạch đối với ứng dụng microservices.
- Dapr không phải là mesh dịch vụ. Mặc dù Dapr và mesh dịch vụ có nhiều điểm tương đồng, nhưng Dapr cung cấp khả năng ở cấp ứng dụng trong khi mesh dịch vụ chạy ở cấp hạ tầng. Nếu xảy ra xung đột hoặc lỗi gián đoạn, người phát triển có quyền quyết định cách xử lý lỗi mà Dapr có thể trả về; dù là áp dụng chính sách thử lại của Dapr, trả lỗi cho khách hàng hoặc thao tác bù trừ, đều là quyết định chỉ người phát triển mới có quyền thực hiện.
Dapr được thiết kế để tích hợp với mesh dịch vụ như Istio, điều này vượt quá phạm vi của chuyên mục này.
- Dapr không phải là dịch vụ đám mây của Microsoft. Mặc dù nó giúp người phát triển xây dựng ứng dụng microservices trong đám mây, nó cung cấp nhiều tích hợp với dịch vụ đám mây Azure, nhưng cũng cung cấp các thành phần tương đương cho AWS, GCP và các dịch vụ khác. Đồng thời, Azure cung cấp hỗ trợ phong phú cho Dapr trong Azure Kubernetes Service (AKS) với mở rộng native, Azure API Management với chính sách Dapr và Azure Container Applications với tích hợp native Dapr.
- Dapr không phải là công nghệ chỉ dành riêng cho .NET. Dapr được viết bằng ngôn ngữ Go, bất kỳ ngôn ngữ nào cũng có thể sử dụng nó. Chúng ta có thể sử dụng SDK của nhiều ngôn ngữ, hoặc lựa chọn tương tác trực tiếp với API Dapr mà không cần thư viện SDK bổ sung.
Lưu ý: Mặc dù chuyên mục này thiên về .NET, nhưng trong ví dụ tôi sẽ cũng trình bày mối liên hệ giữa Dapr và Python.
Hy vọng rằng những lời giới thiệu trên giúp bạn hiểu rõ hơn và khách quan hơn về Dapr, từ đó đưa ra lựa chọn phù hợp cho công nghệ này. Tiếp theo, chúng ta sẽ đi sâu vào kiến trúc của Dapr.
2. Khám phá các thành phần cốt lõi của Dapr
Dapr được thiết kế từ đầu như một tập hợp các khối xây dựng có thể gắn kết, phát triển viên có thể dựa vào chúng hoặc gọi là hạ tầng để phát triển, còn vận hành viên có thể cấu hình đơn giản để ứng dụng thích nghi với môi trường quản lý.
Dưới đây là danh sách đầy đủ các công cụ và thành phần của Dapr:
- Công cụ dòng lệnh Dapr (CLI): Công cụ dòng lệnh đa nền tảng để cấu hình, quản lý và giám sát môi trường Dapr. Đây cũng là công cụ để gỡ lỗi ứng dụng Dapr cục bộ.
- Charts Helm của Dapr: Cung cấp phương thức cài đặt và cập nhật Dapr trong môi trường Kubernetes.
- API Dapr: Xác định cách ứng dụng tương tác với runtime Dapr và sử dụng các khối xây dựng của nó.
- Runtime Dapr: Đây là phần cốt lõi thực hiện API Dapr. Nếu bạn tò mò, bạn có thể xem cách nó được phát triển trong kho lưu trữ Dapr.
- Máy chủ Dapr: Trên máy phát triển, máy chủ chạy như một tiến trình độc lập; trong Kubernetes, nó là một container sidecar trong pod ứng dụng.
- Operator Dapr: Đối với chế độ Kubernetes, operator này dùng để quản lý binding và cấu hình.
- Injector sidecar Dapr: Một khi dịch vụ này được cấu hình trong Kubernetes, nó sẽ chèn sidecar Dapr vào pod ứng dụng.
- Dịch vụ placement Dapr: Mục đích của dịch vụ này là phân phối (hoặc đặt) các instance Actor trong pod Dapr.
- Sentry Dapr: Một CA tích hợp để cấp và quản lý chứng chỉ được sử dụng bởi Dapr nhằm cung cấp bảo mật lớp truyền dẫn (mTLS) tự động.
Đến phiên bản v1.9, Dapr cung cấp chín khối xây dựng (building blocks), các nhà phát triển microservices có thể lựa chọn sử dụng tùy theo nhu cầu, cụ thể như sau:
- Gọi dịch vụ (Service invocation): Cho phép gọi các dịch vụ khác trong cùng môi trường chủ, đồng thời xử lý chiến lược thử lại. Chủ đề này sẽ được trình bày chi tiết hơn trong chương 4 "Gọi dịch vụ".
- Quản lý trạng thái (State management): Để quản lý trạng thái ứng dụng như một cặp khóa-giá trị hiệu quả. Dapr cung cấp nhiều kho trạng thái như Redis, Azure Cosmos DB, Azure SQL Server và PostgreSQL, có thể được chèn thông qua cấu hình. Phần này sẽ được thảo luận kỹ hơn trong chương 5 "Giới thiệu quản lý trạng thái".
- Phát hành và đăng ký (pub/sub): Mô hình pub/sub giúp giải耦 giao tiếp giữa microservices thông qua trao đổi tin nhắn, bus dịch vụ có thể định tuyến tin nhắn giữa người gửi và người nhận. Chủ đề này sẽ được thảo luận kỹ hơn trong chương 6 "Phát hành và đăng ký".
- Ràng buộc tài nguyên (Resource bindings): Đây là điểm nổi bật của tính năng động lực sự kiện của Dapr. Thông qua ràng buộc, ứng dụng của bạn có thể được kích hoạt qua SMS (chỉ là một trong số các dịch vụ phổ biến trong lĩnh vực API giao tiếp). Chủ đề này sẽ được trình bày chi tiết hơn trong chương 7 "Ràng buộc tài nguyên".
- Actors: Mô hình Actors có thể hiểu là mô hình đơn luồng, nhằm đơn giản hóa các tình huống xử lý song song cao bằng cách phân bố lượng yêu cầu tổng thể đến các đơn vị tính toán (Actors), mỗi đơn vị xử lý một yêu cầu của Actor tại một phạm vi nhỏ và độc lập. Chủ đề này sẽ được thảo luận kỹ hơn trong chương 8 "Sử dụng Actors".
- Quan sát (Observability): Dapr giúp các nhà phát triển và vận hành quan sát hành vi của ứng dụng và dịch vụ mà không cần phải can thiệp. Chủ đề này sẽ được trình bày chi tiết hơn trong chương 11 "Theo dõi ứng dụng Dapr".
- Khóa bí mật (Secrets): Tách khóa an toàn khỏi mã nguồn là một thói quen tốt. Dapr có thể lưu trữ các khóa và tham chiếu chúng từ các thành phần khác như Kubernetes hoặc Azure Key Vault.
- Cấu hình (Configuration): Được giới thiệu trong phiên bản Alpha của Dapr 1.8, chủ đề này giải quyết nhu cầu phổ biến trích xuất dữ liệu cấu hình cần thiết cho ứng dụng.
- Khóa phân tán (Distributed lock): Phiên bản Alpha của Dapr 1.8 giới thiệu khóa phân tán, cung cấp cơ chế dựa trên thuê bao mạnh mẽ để quản lý quyền truy cập loại trừ vào khóa được đặt tên. Ứng dụng có thể sử dụng khóa này để đảm bảo các phiên bản song song truy cập tài nguyên độc quyền.
Sau khi hiểu rõ kiến trúc và thành phần của Dapr, trước khi bắt đầu sử dụng, chúng ta cần thiết lập môi trường Dapr trong môi trường phát triển của mình.
3. Thiết lập môi trường Dapr
Dapr là runtime đa nền tảng và đa ngôn ngữ, chuyên mục này tập trung vào C# trong .NET và sử dụng Visual Studio Code làm công cụ phát triển.
Môi trường phát triển của chúng tôi là Windows, nếu bạn cần hướng dẫn cụ thể cho Linux hoặc macOS, vui lòng tham khảo tài liệu chính thức của Dapr.
Đường phát triển của Dapr
Runtime Dapr được phát hành phiên bản sản xuất v1.0 vào tháng 2 năm 2021, bạn có thể xem trong blog chính thức của Dapr. Dapr đã phát hành năm phiên bản phụ mới vào năm 2021. Bạn có thể xem đường phát triển tại đây.
Ví dụ và script trong chuyên mục này đã được cập nhật và kiểm thử với Dapr v1.9.
Tiếp theo, chúng ta sẽ hoàn thành các bước sau:
- Cấu hình Docker
- Cài đặt Dapr CLI
- Cài đặt .NET 6.0
- Cài đặt VS Code
- Cài đặt Windows Terminal
- Cài đặt Dapr trong chế độ tự quản lý
- Cài đặt Dapr trên Kubernetes
Cấu hình Docker
Cài đặt Docker rất đơn giản, bạn có thể tìm thấy hướng dẫn chi tiết tại đây.
Cài đặt Dapr CLI
Cài đặt runtime Dapr cũng không khó, bạn có thể truy cập trang cài đặt tại đây.
Trên Windows, thực hiện lệnh sau để cài CLI vào thư mục c:\dapr và thêm vào biến môi trường PATH để dễ dàng sử dụng từ dòng lệnh:
powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"
Xem thêm chi tiết về Dapr CLI tại đây.
Cài đặt .NET 6.0
Để cài đặt .NET 6, hãy tham khảo trang này để lấy liên kết tệp nhị phân mới nhất.
.NET 6 là phiên bản LTS (Long Term Support) của .NET, nhận hỗ trợ và cập nhật miễn phí trong 3 năm.
Trên máy phát triển, khuyến nghị cài đặt đầy đủ SDK chứa runtime. Sau khi cài đặt, chạy lệnh dotnet --info để xác minh, nếu thành công bạn sẽ thấy đầu ra như sau:
Cài đặt VS Code
VS Code là một trình soạn thảo mã nguồn đa nền tảng tuyệt vời của Microsoft. Bạn có thể cài đặt miễn phí theo hướng dẫn tại đây.
Mở rộng Dapr
Dapr có một mở rộng cho VS Code, hỗ trợ điều hướng môi trường cục bộ Dapr và đơn giản hóa cấu hình gỡ lỗi, chúng tôi khuyên bạn nên cài đặt nó.
Cài đặt Windows Terminal
Windows Terminal là ứng dụng terminal mới, nhanh chóng, hiệu quả, mạnh mẽ và hiệu suất cao dành cho các công cụ dòng lệnh, lệnh CMD, PowerShell và WSL. Trong các chương tiếp theo, chúng ta thường phải chạy nhiều lệnh và công cụ cùng lúc. Vì vậy, tính năng tab của Windows Terminal cũng là lý do tôi khuyên bạn nên sử dụng nó.
Cài đặt Dapr trong chế độ tự quản lý
Dapr có thể khởi tạo theo hai chế độ: tự quản lý và Kubernetes.
Vì dự định sử dụng cho môi trường phát triển, chúng ta sẽ sử dụng chế độ tự quản lý. Sau khi thực hiện lệnh dapr init, Redis, dịch vụ placement của Dapr và Zipkin sẽ được cài đặt mặc định cục bộ.
Lưu ý lệnh
dapr init, nên thực hiện vào buổi sáng khi mạng tốt, nếu vào buổi chiều hoặc tối có thể không thành công.
Theo mặc định, các tệp nhị phân Dapr và thành phần mặc định nằm trong thư mục %USERPROFILE%.dapr\\.
Ví dụ, trong môi trường phát triển cục bộ, cổng Redis được sử dụng cho Dapr có thể đã bị chiếm dụng. Trong trường hợp này, bạn nên xác định tiến trình hoặc container nào đang sử dụng cổng đó và chỉnh sửa tương ứng.
Sau khi lệnh init thành công, bạn sẽ thấy đầu ra như sau:
PS C:\Repos\practical-dapr\chapter01> dapr init
Making the jump to hyperspace...
Installing runtime version 1.8.4
Downloading binaries and setting up components...
Downloaded binaries and completed components set up.
daprd binary has been installed to C:\Users\dabedin\.dapr\bin.
dapr_placement container is running.
dapr_redis container is running.
dapr_zipkin container is running.
Use `docker ps` to check running containers.
Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started
Chúng ta có thể kiểm tra bằng lệnh docker ps:
PS C:\Repos\practical-dapr\chapter01> docker ps --format "{{.Image}} - {{.Ports}} - {{.Names}}"
daprio/dapr:1.8.4 - 0.0.0.0:6050->50005/tcp, :::6050->50005/tcp
- dapr_placement
openzipkin/zipkin - 9410/tcp, 0.0.0.0:9411->9411/tcp, :::9411->9411/tcp - dapr_zipkin
redis - 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp - dapr_redis
Dưới đây là kiểm tra trên Linux:
Cài đặt Dapr trên Kubernetes
Dapr được thiết kế đặc biệt để chạy trên Kubernetes. Trên máy phát triển đã cài đặt Dapr CLI, có thể thiết lập Dapr trên cụm Kubernetes:
dapr init -k
Hoặc bạn có thể sử dụng Helm v3 chart để cài đặt Dapr trên Kubernetes. Chi tiết tại trang web chính thức.
Để kiểm tra việc cài đặt thành công trên k8s, hãy thực hiện lệnh sau:
kubectl get pods --namespace dapr-system
Kết quả trên Linux như sau:
Cập nhật phiên bản Dapr
Trên máy Windows, nếu đã tồn tại phiên bản cũ của Dapr, chỉ cần cài đặt lại CLI bằng lệnh đã nêu ở trên.
Như tài liệu chính thức, chúng ta phải gỡ bỏ Dapr trước, như sau:
PS C:\Repos\practical-dapr\chapter01> dapr uninstall --all
Sau khi cập nhật CLI và gỡ bỏ Dapr, chúng ta có thể cài đặt lại Dapr như sau:
PS C:\Repos\practical-dapr\chapter01> dapr init
Nhớ thực hiện khởi tạo vào buổi sáng khi mạng tốt, lý do bạn hiểu thôi.
Sau khi thực hiện dapr-init, kiểm tra phiên bản Dapr, chúng ta có thể thấy cả CLI và runtime đã chuyển từ 1.0 lên 1.9.5 như đoạn mã sau:
PS C:\Repos\practical-dapr\chapter01> dapr --version
CLI version: 1.9.1
Runtime version: 1.9.5
Môi trường kiểm thử Dapr của chúng ta đã khởi động và đang chạy. Giờ chúng ta chuẩn bị thực hành với ví dụ đầu tiên.
4. Xây dựng ví dụ Dapr
Chúng ta sẽ xây dựng một web API trả về thông báo hello world. Chúng ta chọn đặt tất cả các mẫu trong thư mục C:\Repos\practical-dapr\, và tạo thư mục C:\Repos\practical-dapr_chapter01 cho mẫu đầu tiên. Các bước thực hiện như sau:
- Tạo dự án Web API ASP.NET
PS C:\Repos\practical-dapr\chapter01> dotnet new webapi -o dapr.microservice.webapi
- Thêm tham chiếu SDK Dapr
PS C:\Repos\practical-dapr\chapter01> dotnet add package Dapr.AspNetCore --version 1.9.5
- Mở dự án bằng VS Code và chỉnh sửa mẫu được tạo
- Để hỗ trợ Dapr trong ASP.NET 6, chúng ta đã chỉnh sửa mã trong Program.cs. Chúng ta thay phương thức builder.Services.AddControllers thành builder.Services.AddControllers().AddDapr().
Cuối cùng, để đơn giản hóa mã, chúng ta chú thích middleware app.UseHttpsRedirection().
Cuối cùng xem mã nguồn cuối cùng:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers().AddDapr();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.MapSubscribeHandler();
app.Run();
- Cuối cùng, chúng ta thêm một controller có tên HelloWorldController như đoạn mã sau:
[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
private readonly ILogger<HelloController> _logger;
public HelloController(ILogger<HelloController> logger)
{
_logger = logger;
}
[HttpGet()]
public ActionResult<string> Get()
{
Console.WriteLine("Hello, World.");
return "Hello, World";
}
}
Chúng ta đã thiết lập route và một phương thức Get.
- Để chạy ứng dụng Dapr, có thể sử dụng lệnh sau:
dapr run --app-id <my app id> --app-port <port of the app> --dapr-http-port <port in Dapr> dotnet run
Chúng ta đặt cổng mặc định của ASP.NET thành 5000, cổng HTTP của Dapr thành 5010. Lệnh sau sẽ khởi động ứng dụng Dapr:
PS C:\Repos\dapr.microservice.webapi> dapr run --app-id hello-world --app-port 5000 --dapr-http-port 5010 dotnet run
Thực hiện lệnh trên trong thư mục dự án tương ứng để khởi động Dapr. Dapr sẽ sử dụng cổng 5010 cho HTTP, còn gRPC sẽ tự động chọn cổng khả dụng.
Sau khi khởi động, thông tin log sẽ xuất hiện trên console. Để xác nhận ứng dụng chạy đúng trong ngữ cảnh runtime Dapr:
Updating metadata for app command: dotnet run
You're up and running! Both Dapr and your app logs will
appear here.
Tại thời điểm này, ASP.NET lắng nghe trên cổng 5000, Dapr lắng nghe trên cổng 5010. Để kiểm tra Dapr, chúng ta có thể gọi lệnh curl như sau, hoặc dùng trình duyệt:
PS C:\Repos\practical-dapr> curl http://localhost:5010/v1.0/invoke/hello-world/method/hello
Hello, World
Dapr trả về phản hồi này, cửa sổ Dapr cũng sẽ in kết quả như sau:
== APP == Hello, World.
- Từ cửa sổ khác, hãy xác minh chi tiết dịch vụ Dapr. Chúng ta có thể mở bảng điều khiển Dapr thay vì sử dụng lệnh dapr list như sau:
PS C:\Windows\System32> dapr dashboard
Dapr Dashboard running on http://localhost:8080
Chúng ta có thể truy cập http://localhost:8080 để hiển thị chi tiết của hell-world:

Trong ví dụ này, bảng điều khiển Dapr chỉ hiển thị ứng dụng mẫu chạy trên máy phát triển. Trong môi trường Kubernetes, nó sẽ hiển thị tất cả microservices đang chạy và các thành phần khác:
Bảng điều khiển Dapr hiển thị Zipkin, Redis được triển khai, Redis không chỉ hỗ trợ lưu trạng thái mà còn hỗ trợ phát hành và đăng ký tin nhắn.
Đây là ví dụ đầu tiên chúng ta xây dựng với Dapr.
5. Tổng kết
Trong chương này, bạn đã tìm hiểu về dự án Dapr và các thành phần, khối xây dựng và phương pháp sidecar của nó. Tất cả các khái niệm này sẽ được thảo luận chi tiết trong các chương tiếp theo. Đồng thời, chúng ta đã trình bày cách thiết lập Dapr trên máy phát triển cục bộ, chuẩn bị các công cụ cần thiết. Chúng ta cũng học cách tạo một dự án ASP.NET đơn giản, cách cấu hình và kiểm tra Dapr, cũng như tìm hiểu về bảng điều khiển Dapr, nơi bạn có thể có cái nhìn toàn diện và tức thì về môi trường Dapr.
Trong chương tiếp theo, chúng ta sẽ sử dụng môi trường này để học cách gỡ lỗi Dapr.
6. Câu hỏi
- Dapr cung cấp những khối xây dựng nào?
- Mối quan hệ giữa Dapr CLI và Dapr runtime là gì?
- Làm thế nào để cài đặt Dapr trong môi trường phát triển cục bộ?
- Trong Kubernetes, có thể sử dụng phương pháp nào để cài đặt Dapr?
7. Đọc thêm
- Dapr hiểu thế nào | Bài viết của Thánh Tiêu nói về chức năng các thành phần cốt lõi của Dapr, có hình ảnh và nội dung phong phú, nên đọc.
- Tổng quan Dapr: https://docs.dapr.io/concepts/overview/
- Bắt đầu với Dapr: https://docs.dapr.io/getting-started/
- Đường phát triển Dapr: https://docs.dapr.io/contributing/roadmap/
Nếu bạn muốn đọc trước các bài viết trong chuỗi Dapr, hãy truy cập nơi đây, nơi tôi sẽ ưu tiên đăng tải kết quả mới nhất, rất mong nhận được sự góp ý từ bạn.