学海无涯

导航

统计

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

posted on   宁静致远.  阅读(184)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示