广东万泰建设有限公司网站,广东人才招聘网,wordpress调用文章标题,昌黎建设局网站dpar在同一台电脑上不能run 相同appid#xff0c;这个在上篇说过#xff0c;所以就用外部负载均衡nginx来对应#xff0c;那在不同的host中跑同一服务#xff0c;看看dapr内部的负载均衡是怎么实现的。说说现有的服务#xff0c;两个服务#xff0c;订单服务#xff0c;… dpar在同一台电脑上不能run 相同appid这个在上篇说过所以就用外部负载均衡nginx来对应那在不同的host中跑同一服务看看dapr内部的负载均衡是怎么实现的。说说现有的服务两个服务订单服务支付服务下完订单后同步调支付服务。一、demo项目的mock代码OrderSystem项目端口5000using 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 ILoggerHomeController _logger;private readonly IHttpClientFactory _clientFactory;private readonly string? _payUrl;public HomeController(ILoggerHomeController logger, IHttpClientFactory clientFactory, IConfiguration configuration){_payUrl configuration.GetSection(payurl).Value;_clientFactory clientFactory;_logger logger;}[HttpGet(/order)]public async TaskIActionResult Order(){_logger.LogInformation($下单开始);await Task.Delay(400);_logger.LogInformation($订单完成 调用支付系统);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项目端口6000using 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 ILoggerHomeController _logger;public HomeController(ILoggerHomeController logger){_logger logger;}[HttpGet(/pay)]public async TaskIActionResult 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服务并启动sidecardapr run --app-id order --app-port 5000 --dapr-http-port 3500在windows10和mac下分别部署pay服务并启动sidecardapr run --app-id pay --app-port 6000 --dapr-http-port 3600三、测试postman调用地址localhost:3500/v1.0/invoke/order/method/order在多次调用中支付接口返回的结果中的host是在变换的说明pay达到了负载均衡的效果dapr本地部署负载均衡的服务发现是用mDNS来实现的通过sidecar把各自代码服务的信息多路广播到局域网中的其他sidecar来共享同步服务的相关信息。返回结果1返回结果2心得受到传统的负载均衡器的测试影响总想把Pay服务在两个电脑上跑起来用postman直接连http://localhost:3600/v1.0/invoke/pay/method/pay调用看两个服务是不是轮询访问这里就与dapr的思想不一致了。dapr最核心的功能通过sidecar代表应用来处理一切事务sidecar是全权代表意思调用者也有自己的sidecar给自己的sidecar索要外部资源。上例中order端口5000sidecare的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……