在非k8s 環境下 的應用 使用 Dapr Sidekick for .NET

張善友發表於2022-04-07

在k8s 環境下,通過Operator 可以管理Dapr sidecar, 在虛擬機器環境下,我們也是非常需要這樣的一個管理元件,類似下圖:


daprmanage

在這張圖片中,在上圖左面,我們看到了“dapr.exe”、我們的應用程式和另一個程式“daprd.exe”之間的通訊,該程式實際上是 Sidecar 程式。這是通常的方式(“開箱即用”),例如:

dapr run --app-id backend --app-port 5001  -- dotnet run --urls=http://localhost:5001/ -p ./WeatherForecastService/WeatherForecastService.csproj

dapr run --app-id proxy --app-port 6001  -- dotnet run --urls=http://localhost:6001/ -p ./WeatherForecastProxyService/WeatherForecastProxyService.csproj

圖片右面,使用 Sidekick簡化了此過程/通訊,並且我們可以更好地控制以及其他功能。Dapr Sidekick for .NET 是一個元件,它允許我們將 Dapr 新增到我們的專案中以避免摩擦。簡化 .NET 開發和操作。 當我們的專案部署在虛擬機器環境時,推薦使用這個元件。通過Sidekick 我們的應用程式/程式負責啟動和執行 Dapr 所需的一切。

我的示例程式碼放在這裡:https://github.com/geffzhang/ServiceToService-Sideckick ,通過簡單的三步就可以完成這項工作。

1、新增Nuget 包 Man.Dapr.Sidekick.AspNetCore :

dotnet add package Man.Dapr.Sidekick.AspNetCore --version 1.2.1

2、修改類 Startup.cs 的 ConfigureServices 方法如下:

public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // Add Dapr Sidekick services.AddDaprSidekick(Configuration); }

3、接下來,當我們的呼叫(或代理)應用程式呼叫另一個應用程式時,名稱/id 為“ backend ”,我們需要指定其AppId。以同樣的方式,由於我們使用“ http”,我們必須指出"AppSsl": false。所有這些規範都通過“ appsetings.json ” 檔案傳遞給 Sidekick,如下所示。

專案backend 的配置:

"DaprSidekick": {
   // Set the runtime location of config/components files to be the "dapr" folder under the deployed application
   "RuntimeDirectory": "dapr",
   "Sidecar": {
     "AppId": "backend",
     "AppSsl": false,
     "AppPort": 5001,
     "DaprHttpPort": 3501,
     "DaprGrpcPort": 50001
   },
   "Placement": {},
   "Sentry": {}
}

專案 proxy的配置

"DaprSidekick": {
   // Set the runtime location of config/components files to be the "dapr" folder under the deployed application
   "RuntimeDirectory": "dapr",
   "Sidecar": {
     "AppId": "proxy",
     "AppSsl": false,
     "AppPort": 6001,
     "DaprHttpPort": 3601,
     "DaprGrpcPort": 60001
   },
   "Placement": {},
   "Sentry": {}
}

注意對於上述配置檔案,由於我們執行多個專案,我們還必須指定“ AppPort ”、“ DaprHttpPort ”和“ DaprGrpcPort ”屬性。其餘的“Placement”和“Sentry”部分,以及其他屬性,暫時可以忽略

RuntimeDirectory  是Dapr 執行時配置檔案位置,我們在示例裡測試使用Consul 作為服務註冊和服務發現元件。

改造後直接執行就可以了,這個特別適合IOT場景下使用Dapr。

dotnet WeatherForecastService.dll --urls=http://localhost:5001

dotnet WeatherForecastProxyService.dll --urls=http://localhost:6001

相關文章