日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用

發(fā)布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

dpar在同一臺電腦上不能run 相同appid,這個在上篇說過,所以就用外部負載均衡nginx來對應,那在不同的host中跑同一服務,看看dapr內部的負載均衡是怎么實現(xiàn)的。

說說現(xiàn)有的服務,兩個服務,訂單服務,支付服務;下完訂單后同步調支付服務。

一、demo項目的mock代碼

OrderSystem項目,端口5000

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System; using System.Net.Http; using System.Threading.Tasks;namespace OrderSystem.Controllers; [ApiController] [Route("[controller]")] public class HomeController : ControllerBase {private readonly ILogger<HomeController> _logger;private readonly IHttpClientFactory _clientFactory;private readonly string? _payUrl;public HomeController(ILogger<HomeController> logger, IHttpClientFactory clientFactory, IConfiguration configuration){_payUrl = configuration.GetSection("payurl").Value;_clientFactory = clientFactory;_logger = logger;}[HttpGet("/order")]public async Task<IActionResult> Order(){_logger.LogInformation($"下單開始");await Task.Delay(400);_logger.LogInformation($"訂單完成 調用支付系統(tǒng)");var client = _clientFactory.CreateClient();var content = await client.GetStringAsync(_payUrl);return new JsonResult(new { pay_result = content });} }

appsettings.json

{"Urls": "http://*:5000","Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","PayUrl":?"http://localhost:3500/v1.0/invoke/payment/method/pay" }

PaymentSystem項目,端口6000

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System.Net; using System.Runtime.InteropServices; using System.Threading.Tasks;namespace PaymentSystem.Controllers; [ApiController] [Route("[controller]")] public class HomeController : ControllerBase {private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}[HttpGet("/pay")]public async Task<IActionResult> TestGet(){_logger.LogInformation($"開始支付");await Task.Delay(200);_logger.LogInformation($"支付完成");return new JsonResult(new { result = true, message = "支付成功", host = Dns.GetHostName() });} }

appsettings.json

{"Urls": "http://*:6000","Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*" }

二、應用部署調用關系圖

在windows10部署order服務,并啟動sidecar

dapr?run?--app-id?order?--app-port?5000??--dapr-http-port?3500

在windows10和mac下分別部署pay服務,并啟動sidecar

dapr?run?--app-id?pay?--app-port?6000?--dapr-http-port?3600

三、測試

postman調用地址:localhost:3500/v1.0/invoke/order/method/order

在多次調用中,支付接口返回的結果中的host是在變換的,說明pay達到了負載均衡的效果(dapr本地部署負載均衡的服務發(fā)現(xiàn)是用mDNS來實現(xiàn)的,通過sidecar把各自代碼服務的信息多路廣播到局域網(wǎng)中的其他sidecar,來共享同步服務的相關信息)。

返回結果1:

返回結果2:

心得:

受到傳統(tǒng)的負載均衡器的測試影響,總想把Pay服務在兩個電腦上跑起來,用postman直接連http://localhost:3600/v1.0/invoke/pay/method/pay調用,看兩個服務是不是輪詢訪問,這里就與dapr的思想不一致了。

dapr最核心的功能通過sidecar代表應用,來處理一切事務,sidecar是全權代表,意思調用者也有自己的sidecar,給自己的sidecar索要外部資源。上例中order端口5000,sidecare的http端口是3500,它們是一組;pay端口是6000,sidecar的http端口是3600;如果order調用pay,那order應該在自己sidecare的3500端口上調用pay,所以調用地址是:http://localhost:3500/v1.0/invoke/pay/method/pay。

換句話說,如果想用postman調用pay服務,同理,需要給postman起個3400的sidecare,也可以用postman調http://localhost:3400/v1.0/invoke/pay/method/pay來訪問pay服務了,相當于postman和3400的sidecar是一家人,內部調用,全權代理,這樣被調用的pay就會在win和mac上輪詢調用了。

所以這里需要默念10次:服務和它的sidecar是一家人,有困難找自己的sidecar……

總結

以上是生活随笔為你收集整理的Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。