在非k8s 環境下 的應用 使用 Dapr Sidekick for .NET
在k8s 環境下,通過Operator 可以管理Dapr sidecar, 在虛擬機環境下,我們也是非常需要這樣的一個管理組件,類似下圖:
在這張圖片中,在上圖左面,我們看到了「dapr.exe」、我們的應用程式和另一個進程「daprd.exe」之間的通訊,該進程實際上是 Sidecar 進程。這是通常的方式(「開箱即用」),例如:
dapr run –app-id backend –app-port 5001 — dotnet run –urls=//localhost:5001/ -p ./WeatherForecastService/WeatherForecastService.csproj
dapr run –app-id proxy –app-port 6001 — dotnet run –urls=//localhost:6001/ -p ./WeatherForecastProxyService/WeatherForecastProxyService.csproj
圖片右面,使用 Sidekick簡化了此過程/通訊,並且我們可以更好地控制以及其他功能。Dapr Sidekick for .NET 是一個組件,它允許我們將 Dapr 添加到我們的項目中以避免摩擦。簡化 .NET 開發和操作。 當我們的項目部署在虛擬機環境時,推薦使用這個組件。通過Sidekick 我們的應用程式/進程負責啟動和運行 Dapr 所需的一切。
我的示例程式碼放在這裡://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=//localhost:5001
dotnet WeatherForecastProxyService.dll –urls=//localhost:6001