Dapr 服务调用
服务调用构建块优势:服务发现、自动重试、消息加密(使用 mTLS)以及改进的可观测性。
Dapr 调用API
默认情况下,Dapr 挎斗 (SideCar) 依赖于网关来限制对其公共 API 的访问。 因此,请清除“为 HTTPS 配置”复选框:
打开 NuGet 包管理器,添加以下包
1 | Dapr.AspNetCore |
打开 Program.cs 文件并注入 DaprClient
服务:
1 2 | // Add services to the container. builder.Services.AddDaprClient(); |
调用服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using Dapr.Client; using Microsoft.AspNetCore.Mvc.RazorPages; namespace MyFrontEnd.Pages; public class IndexModel : PageModel { private readonly DaprClient _daprClient; public IndexModel(DaprClient daprClient) { _daprClient = daprClient; } public async Task OnGet() { var forecasts = await _daprClient.InvokeMethodAsync<IEnumerable<WeatherForecast>>( HttpMethod.Get, "MyBackEnd" , "weatherforecast" ); ViewData[ "WeatherForecastData" ] = forecasts; } } |
使用 DaprClient.InvokeMethodAsync
方法来调用 MyBackEnd(应用程序 ID)
服务的 weatherforecast
方法
先后在每个项目上添加 Docker Compose ,最终Docker Compose文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | version: '3.4' services: myfrontend: image: ${DOCKER_REGISTRY-}myfrontend build: context: . dockerfile: MyFrontEnd/Dockerfile mybackend: image: ${DOCKER_REGISTRY-}mybackend build: context: . dockerfile: MyBackEnd/Dockerfile |
将 Dapr 挎斗容器添加到 Compose 文件。 请谨慎地将 docker-compose.yml 文件的内容更新为与以下示例相匹配。 请密切注意格式和间距,切勿使用制表符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | version: '3.4' services: myfrontend: image: ${DOCKER_REGISTRY-}myfrontend build: context: . dockerfile: MyFrontEnd/Dockerfile ports: - "53000:50001" myfrontend-dapr: image: "daprio/daprd:latest" command: [ "./daprd" , "-app-id" , "MyFrontEnd" , "-app-port" , "80" ] depends_on: - myfrontend network_mode: "service:myfrontend" mybackend: image: ${DOCKER_REGISTRY-}mybackend build: context: . dockerfile: MyBackEnd/Dockerfile ports: - "52000:50001" mybackend-dapr: image: "daprio/daprd:latest" command: [ "./daprd" , "-app-id" , "MyBackEnd" , "-app-port" , "80" ] depends_on: - mybackend network_mode: "service:mybackend" |
更新后的文件中,我们分别为 myfrontend
和 mybackend
服务添加了 myfrontend-dapr
和 mybackend-dapr
挎斗。
myfrontend-dapr
和 mybackend-dapr
挎斗:
- 挎斗使用了
daprio/daprd:latest
容器映像。 不建议将latest
标记用于生产方案。 对于生产,最好的做法是使用特定的版本号。 - 出于网络隔离目的,Compose 文件中定义的每个服务都有其自己的网络命名空间。 挎斗使用
network_mode: "service:..."
确保它们在与应用程序所在的同一网络命名空间中运行。 这样做能够使挎斗和应用程序使用localhost
进行通信。 - 必须公开 Dapr 挎斗在上面侦听 gRPC 通信的端口(默认为 50001),从而使挎斗能够彼此通信。
参考:https://learn.microsoft.com/zh-cn/dotnet/architecture/dapr-for-net-developers/getting-started
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构