tnblog
首页
视频
资源
登录

Dapr .NetCore 调用方法

7578人阅读 2021/9/28 10:45 总访问:3467612 评论:0 收藏:0 手机
分类: 云产品

Dapr .NetCore 调用方法

创建客户端项目(InvokeMethod)


在Program类中设置日志控制台输出,在 launchSettings.json 设置运行的端口为5001

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureLogging(logging =>
  4. {
  5. logging.ClearProviders();
  6. logging.AddConsole();
  7. logging.AddDebug();
  8. })
  9. .ConfigureWebHostDefaults(webBuilder =>
  10. {
  11. webBuilder.UseStartup<Startup>();
  12. });
  1. {
  2. "profiles": {
  3. "InvokeMethod": {
  4. "commandName": "Project",
  5. "launchBrowser": true,
  6. "launchUrl": "weatherforecast",
  7. "applicationUrl": "http://localhost:5001",
  8. "environmentVariables": {
  9. "ASPNETCORE_ENVIRONMENT": "Development"
  10. }
  11. }
  12. }
  13. }


安装dapr的依赖包 Dapr.AspNetCore,我这里的版本是1.4.0

  1. Install-Package Dapr.AspNetCore
  2. # or
  3. dotnet add package Dapr.AspNetCore


安装json序列化的包(Newtonsoft.Json)

  1. Install-Package Newtonsoft.Json
  2. # or
  3. dotnet add package Newtonsoft.Json


安装Dapr服务

  1. services.AddControllers().AddDapr();


创建 SendMessageController 控制器,其中里面有三个可请求的方法
(Send) 将mydata发送Get请求到appId为myserverRequest方法中
(Sendv2) 比上面一个多一种http请求方式,且是POST方法,判断请求是否成功
(Sendv3) 比上面多接受处理返回结果

  1. [ApiController]
  2. [Route("[controller]")]
  3. public class SendMessageController : ControllerBase
  4. {
  5. private readonly ILogger<SendMessageController> _logger;
  6. private readonly DaprClient _client;
  7. public SendMessageController(ILogger<SendMessageController> logger,DaprClient client )
  8. {
  9. _logger = logger;
  10. _client = client;
  11. }
  12. [HttpGet]
  13. public async Task<string> Send()
  14. {
  15. var idnumber = new Random().Next(0,99);
  16. _logger.LogInformation("正在发送");
  17. var mydata = new MyClass(idnumber,$"MyClass{idnumber}");
  18. await _client.InvokeMethodAsync<MyClass>(HttpMethod.Get,"myserver","Request",mydata);
  19. _logger.LogInformation("发送成功");
  20. return "ok";
  21. }
  22. [HttpGet("sendv2")]
  23. public async Task<string> Sendv2()
  24. {
  25. var idnumber = new Random().Next(0,99);
  26. var mydata = new MyClass(idnumber,$"MyClass{idnumber}");
  27. _logger.LogInformation("正在发送");
  28. var client = DaprClient.CreateInvokeHttpClient(appId: "myserver");
  29. _logger.LogInformation("发送成功");
  30. // http的方式
  31. var response = await client.PostAsJsonAsync("/Request/v2", mydata);
  32. if (response.IsSuccessStatusCode)
  33. {
  34. return "ok";
  35. }else{
  36. return "bad";
  37. }
  38. }
  39. [HttpGet("sendv3")]
  40. public async Task<string> Sendv3()
  41. {
  42. var idnumber = new Random().Next(0,99);
  43. var mydata = new MyClass(idnumber,$"MyClass{idnumber}");
  44. var client = DaprClient.CreateInvokeHttpClient(appId: "myserver");
  45. // http的方式
  46. var response = await client.PostAsJsonAsync("/Request/v3", mydata);
  47. if (response.IsSuccessStatusCode)
  48. {
  49. var newdata = await response.Content.ReadFromJsonAsync<MyClass>();
  50. _logger.LogInformation($"得到服务器端处理的新数据:{newdata.Id} {newdata.Name}");
  51. return JsonConvert.SerializeObject(newdata);
  52. }else{
  53. return "bad";
  54. }
  55. }
  56. public class MyClass
  57. {
  58. public MyClass(){}
  59. public MyClass(int id,string name)
  60. {
  61. Id = id;
  62. Name = name;
  63. }
  64. public int Id { get; set; }
  65. public string Name { get; set; }
  66. }
  67. }

创建服务端项目(InvokeMethodServer)


在Program类中设置日志控制台输出,在 launchSettings.json 设置运行的端口为5000

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureLogging(logging =>
  4. {
  5. logging.ClearProviders();
  6. logging.AddConsole();
  7. logging.AddDebug();
  8. })
  9. .ConfigureWebHostDefaults(webBuilder =>
  10. {
  11. webBuilder.UseStartup<Startup>();
  12. });
  1. {
  2. "profiles": {
  3. "InvokeMethod": {
  4. "commandName": "Project",
  5. "launchBrowser": true,
  6. "launchUrl": "weatherforecast",
  7. "applicationUrl": "http://localhost:5000",
  8. "environmentVariables": {
  9. "ASPNETCORE_ENVIRONMENT": "Development"
  10. }
  11. }
  12. }
  13. }


安装dapr的依赖包 Dapr.AspNetCore

  1. Install-Package Dapr.AspNetCore
  2. # or
  3. dotnet add package Dapr.AspNetCore


安装json序列化的包(Newtonsoft.Json)

  1. Install-Package Newtonsoft.Json
  2. # or
  3. dotnet add package Newtonsoft.Json


安装Dapr服务

  1. services.AddControllers().AddDapr();


接着定义RequestController控制器与客户端相对应的请求处理方法

  1. [ApiController]
  2. [Route("[controller]")]
  3. public class RequestController : ControllerBase
  4. {
  5. private readonly ILogger<RequestController> _logger;
  6. public RequestController(ILogger<RequestController> logger)
  7. {
  8. _logger = logger;
  9. }
  10. [HttpGet]
  11. public void Get(MyClass mydata)
  12. {
  13. _logger.LogInformation($"Server Finish! Result: {mydata.Id} {mydata.Name}");
  14. }
  15. [HttpPost("v2")]
  16. public void GetV2(MyClass mydata)
  17. {
  18. _logger.LogInformation($"Server Finish v2 ! Result: {mydata.Id} {mydata.Name}");
  19. }
  20. [HttpPost("v3")]
  21. public Task<MyClass> GetV3(MyClass mydata)
  22. {
  23. _logger.LogInformation($"Server Get Data v3 ! Data: {mydata.Id} {mydata.Name}");
  24. mydata.Id = new Random().Next(1,99);
  25. mydata.Name = "From My Server Data";
  26. _logger.LogInformation($"Server Updata Data: {mydata.Id} {mydata.Name}");
  27. return Task.FromResult(mydata);
  28. }
  29. public class MyClass
  30. {
  31. public MyClass(){}
  32. public MyClass(int id,string name)
  33. {
  34. Id = id;
  35. Name = name;
  36. }
  37. public int Id { get; set; }
  38. public string Name { get; set; }
  39. }
  40. }

运行测试

  1. # 客户端运行
  2. dapr run --app-id myclient --app-port 5001 --dapr-http-port 3501 -- dotnet run
  3. # 服务器端运行
  4. dapr run --app-id myserver --app-port 5000 --dapr-http-port 3500 -- dotnet run


通过dapr list查看运行列表


测试方法

  1. dapr invoke --app-id myclient --method SendMessage --verb GET
  2. dapr invoke --app-id myclient --method SendMessage/sendv2 --verb GET
  3. dapr invoke --app-id myclient --method SendMessage/sendv3 --verb GET


或者以http请求的方式进行访问

  1. curl http://localhost:3501/v1.0/invoke/myclient/method/SendMessage
  2. curl http://localhost:3501/v1.0/invoke/myclient/method/SendMessage/sendv2
  3. curl http://localhost:3501/v1.0/invoke/myclient/method/SendMessage/sendv3


客户端请求信息


服务器端处理信息

示例中的参数与描述

dapr run的参数

参数 默认 描述
—app-id, -a 您的应用程序的 id,用于服务发现
—app-max-concurrency unlimited 应用的并发级别,否则为无限制
—app-port, -p 您的应用程序正在侦听的端口
—app-protocol, -P http Dapr 用于与应用程序通信的协议(gRPC 或 HTTP)。有效值为:http或grpc
—app-ssl false Dapr 调用应用程序时启用 https
—components-path, -d Linux & Mac:$HOME/.dapr/components, Windows: %USERPROFILE%\.dapr\components 组件目录的路径
—config, -c Linux & Mac: $HOME/.dapr/config.yaml, Windows: %USERPROFILE%\.dapr\config.yaml Dapr 配置文件
—dapr-grpc-port 50001 Dapr 监听的 gRPC 端口
—dapr-http-port 3500 Dapr 监听的 HTTP 端口
—enable-profiling false pprof通过 HTTP 端点启用分析
—help, -h 打印此帮助消息
—image 用于构建代码的图像。输入是: repository/image
—log-level info 日志详细程度。有效值是:debuginfowarnerrorfatal,或者panic
—placement-host-address localhost 安置服务的地址。格式< hostname >适用于默认端口(6050在 Windows 上,50005在 Linux/MacOS 上)或< hostname >:< port >自定义端口
—profile-port 7777 配置文件服务器侦听的端口
—dapr-http-max-request-size 4 请求正文的最大大小(以 MB 为单位)。

dapr invoke的参数

参数 默认 描述
—app-id, -a 要调用的应用程序 ID
—help, -h 打印此帮助消息
—method, -m 调用的方法
—data, -d JSON 序列化数据字符串(可选)
—data-file, -f 包含 JSON 序列化数据的文件(可选)
—verb, -v POST 要使用的 HTTP 动词

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术