栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Dapr专题之03服务调用

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dapr专题之03服务调用

Dapr服务调用

文章目录
  • Dapr服务调用
  • Dapr服务调用的优势
  • Dapr服务调用终结点
    • 1.项目创建
    • 2.HTTP服务
    • 3.启动与测试HTTP服务
    • 4.GRPC服务
    • 5.启动与测试GRPC服务
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

Dapr服务调用的优势
  • 服务调用失败时会自动重试(三次)
  • 通过mTLS加密确保服务间通信安全
  • 能捕获服务间所有调用的跟踪和指标
  • 实现负载均衡

Dapr服务调用终结点
http://localhost:/v1.0/invoke//method/
  • :Dapr正在侦听的HTTP端口
    
  • :要调用的服务的应用程序ID
    
  • : 要在远程服务上调用的方法的名称
    

1.项目创建
  1. 新建解决方案:Dapr.Demo
  2. 新建两个.Net 6 Web API项目:BackEnd(需开启https),FrontEnd
  3. 设置默认端口:
    BackEnd
    builder.WebHost.UseUrls("https://*:5000");
    
    FrontEnd
    builder.WebHost.UseUrls("http://*:5001");
    
2.HTTP服务
  • FrontEnd
    • 新增Nuget引用:Dapr.Client,Dapr.AspNetCore
  • 注册Dapr
    builder.Services.AddControllers().AddDapr();
    
  • 新增控制器:DaprController,注入DaprClient
       private readonly ILogger _logger;
       private readonly DaprClient _daprClient;
       public DaprController(ILogger logger, DaprClient daprClient)
       {
           _logger = logger;
           _daprClient = daprClient;
       }
    
  • 新增接口,通过HttpClient调用BackEnd
        [HttpGet]
        public async Task GetAsync()
        {
            using var httpClient = DaprClient.CreateInvokeHttpClient();
            var result = await httpClient.GetAsync("http://backend/WeatherForecast");
            var resultContent = await result.Content.ReadAsStringAsync();
            return Ok(resultContent);
        }
    
  • 新增接口,通过注入的DaprClient调用BackEnd
        [HttpGet("di")]
        public async Task GetDIAsync()
        {
            var result = await _daprClient.InvokeMethodAsync>(HttpMethod.Get, "backend", "WeatherForecast");
            return Ok(result);
        }
    
3.启动与测试HTTP服务
  • 启动BackEnd
      dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend dotnet  .BackEndbinDebugnet6.0BackEnd.dll --app-ssl
    
  • 启动FrontEnd
    dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .FrontEndbinDebugnet5.0FrontEnd.dll
    
  • 发送请求,可以使用浏览器或者ApiPost等工具测试
    http://localhost:5001/api/Dapr
    http://localhost:3501/v1.0/invoke/frontend/method/api/Dapr
    

调用结果如下:

4.GRPC服务
  • BackEnd

    • 新增Nuget引用:Dapr.AspNetCore,Grpc.AspNetCore
  • 新增Protos/greet.proto,写入以下代码

    syntax = "proto3";
    option csharp_namespace = "GrpcGreeter";
    package greet;
    
    message HelloRequest {
    string name = 1;
    }
    
    message HelloReply {
    string message = 1;
    }
    
  • 打开csproj文件,指定Server端

    
    
    
    
  • 新增新增Services/HelloService,写入以下代码

    public class HelloService : AppCallback.AppCallbackBase
    {
       public override async Task OnInvoke(InvokeRequest request, ServerCallContext context)
       {
           var response = new InvokeResponse();
           switch (request.Method)
           {
               case "sayhi":
                   var input = request.Data.Unpack();
                   response.Data = Any.Pack(new HelloReply { Message = $"Hi,i'm {input.Name},nice to meet you!" });
                   break;
           }
           return response;
       }
    }
    
  • 注册GRPC,Program中写入以下代码

    builder.Services.AddGrpc();
    app.MapGrpcService();
    
  • FrontEnd

    • 新增Nuget引用:Google.Protobuf,Grpc.Net.Client,Grpc.Tools
    • Copy一份BackEnd中的Protos/greet.proto 并修改csproj文件 指定client
      
      
      
      
    • 新增接口,通过Grpc调用BackEnd
      [HttpGet("grpc")]
      public async Task GrpcAsync()
      {
         using var daprClient = new DaprClientBuilder().Build();
         var result = await daprClient.InvokeMethodGrpcAsync("backend", "sayhi", new 	HelloRequest { Name = "tom" });
         return Ok(result);
      }
      
      
5.启动与测试GRPC服务
  • 启动BackEnd
      dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend  --app-protocol grpc  dotnet  .BackEndbinDebugnet6.0BackEnd.dll --app-ssl
    
  • 启动FrontEnd
    dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .FrontEndbinDebugnet6.0FrontEnd.dll
    
  • 发送请求,可以使用浏览器或者ApiPost等工具测试
    http://localhost:5001/api/Dapr/grpc
    http://localhost:3501/v1.0/invoke/frontend/method/api/Dapr/grpc
    

调用结果如下:


总结 以上就是这次要给大家分享的内容,本文介绍了Dapr中基于HTTP和GRPC两种不同方式进行服务调用的实操过程,下次将给大家介绍Dapr中的状态管理,欢迎各位朋友点赞收藏,同时希望本文能够给大家带来一丝帮助与启发。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983854.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号