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

dpar在同一台电脑上不能run 相同appid,这个在上篇说过,所以就用外部负载均衡nginx来对应,那在不同的host中跑同一服务,看看dapr内部的负载均衡是怎么实现的。

说说现有的服务,两个服务,订单服务,支付服务;下完订单后同步调支付服务。

一、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($"订单完成   调用支付系统");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": "*"
}

二、应用部署调用关系图

d6a152bc3eaa93b0e3007464c19c4177.png

在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本地部署负载均衡的服务发现是用mDNS来实现的,通过sidecar把各自代码服务的信息多路广播到局域网中的其他sidecar,来共享同步服务的相关信息)。

返回结果1:

0c391b78941d10a4c292149b5b3bbd5c.png

返回结果2:

b40ce6a610fb92cd461656a8449f34d6.png

心得:

受到传统的负载均衡器的测试影响,总想把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……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑编程教学_2020太原数控车床电脑编程一对一实操教学不限学时

2020太原数控车床电脑编程一对一实操教学不限学时石家庄工之艺数培训学校培训‘数控技术员’ 学生时&#xff0c;拿到图纸和毛坯,能够自己的在数控机床上做出成品。实行教学&#xff0c;“小班授课&#xff0c;一对一的教&#xff0c;理论实践相结合&#xff0c;随到随学&#…

多功能复合机基于用户认证功能的实现过程详解

多功能复合机基于用户认证功能的实现方法 -----网络设备共享案例分析 公司需求&#xff1a;***是一家租售写字楼的服务性企业&#xff0c;主要是针对小型企业进行出租&#xff0c;房间有大有小&#xff0c;大的可以容纳5-10人&#xff0c;小的可以容纳1-4人左右。由于都是一些小…

用python写简单爬虫,用Python写简单的爬虫

准备&#xff1a;1.扒网页&#xff0c;根据URL来获取网页信息importurllib.parseimporturllib.requestresponse urllib.request.urlopen("https://www.cnblogs.com")print(response.read())urlopen方法urlopen(url, data, timeout)url即为URL&#xff0c;data是访问U…

单元测试(二)基本使用争议篇

介绍常用的单元测试是测试方法、API等&#xff0c;下面我们来演示一下Xunit测试框架的简单使用&#xff0c;有些是为了演示而写的单元测试。最下面有反转&#xff0c;一定要看到最后操作创建单元测试项目本次文章还在原来项目的基础上进行操作&#xff0c;右键解决方案添加单元…

听说你趁我不在家,欺负我老婆?

1 听说你趁我不在家欺负我老婆了&#xff1f;▼2 当男生们聚在一起时他们都会做什么&#xff1f;▼3 其实我是广西人&#xff0c;每顿要嗦1吨粉▼4 山西人的饮水机里放的都是醋&#xff1f;▼5 可现实中又有几个总裁没有啤酒肚呢&#xff1f;▼6 开学考试&#xff0c;一考…

RHEL5.3下MRTG+SNMP的搭建

一、MRTG的简介 Mrtg(Multi Router Traffic Grapher,MRTG)是一个监控网络链路流量负载的工具软件&#xff0c;它通过snmp协议从设备得到设备的流量信息&#xff0c;并将流量负载以包含PNG格式的图形的HTML文档方式显示给用户&#xff0c;以非常直观的形式显示流量负载(可以在网…

BeetleX.WebFamily之Markdown编辑器

组件的新版集成一款Markdown编辑器ToastUIEditor&#xff0c;通过它可以快速地构建编写Markdown文本内容功能。集成后的ToastUIEditor支持图表&#xff0c;表格&#xff0c;文件管理插入等功能。新建一个控制台项目&#xff0c;通过Nuget引用组件后编写以下代码class Program {…

如何逃离「信息茧房」?

全世界只有3.14 % 的人关注了爆炸吧知识智能算法、内容推荐&#xff0c;当我们滑动屏幕的时候&#xff0c;映入眼帘的总是我们想看的内容。不过&#xff0c;这样的内容选择或许会让我们陷入「信息茧房」&#xff1a;只注意自己选择的、让自己愉悦的资讯&#xff0c;久而久之和蚕…

oracle表存储表空间,Oracle的存储信息-表空间信息记录

经过前面的介绍&#xff0c;我们已经能够对Oracle的存储结构有了深入的了解&#xff0c;总结一下前面的内容&#xff1a;Oracle最小的数据存储单位是数据块(Block)&#xff0c;如果以单个数据块进行对象空间分配&#xff0c;那么显然分配将过于频繁&#xff0c;所以Oracle使用多…

排序算法java实现

1. 插入排序 原理&#xff1a;遍历到第N个元素的时候前面的N-1个元素已经是排序好的了&#xff0c;那么就查找前面的N-1个元素把这第N个元素放在合适的位置&#xff0c;如此下去直到遍历完序列的元素为止。 算法的复杂度也是简单的&#xff0c;排序第一个需要1的复杂度&…

FusionChart完全入门手册 -2

今天主要探讨下&#xff0c;数据文件的生成方式&#xff0c;只做探讨。 其实funsioncharts提供了多种数据展现方式&#xff0c;除了前一节采用的直接的DATAFile的方式外&#xff0c;还有官方提供的标准的c#实现方式。 看个截图 但是总感觉使用官方提供的InfoSoftGlobal不是很灵…

BeetleX.WebFamily之ElasticSearch搜索集成

组件在最新版本中集成了基于ElasticSearch的文档搜索功能&#xff0c;通过这一功能可以快速地构建文档查询的webapi服务和web搜索应用。接下来介绍一下如果使用组件的ElasticSearch组件来进行文档构建和查询。ElasticSearch要求组件支持7.x和6.x两个版本的ElasticSearch服务&am…

直男们给我看清楚!这才是小姐姐的真面目......

1 这才是化妆的真相&#xff01;▼2 听说&#xff0c;这就是当年Tom劈过得那棵树▼3 等一下&#xff01;这题真的有正确答案吗&#xff1f;▼4 这是一只长大成熟的猫咪了▼5 想当年上学的时候转书、转笔都一门灵&#xff0c;就是脑子不会转▼6 猫的四肢和尾巴仿佛都有独立…

模型部署到移动端_谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端...

雷锋网 AI 开发者按&#xff1a;谷歌从 17 年发布 MobileNets 以来&#xff0c;每隔一年即对该架构进行了调整和优化。现在&#xff0c;开发者们对 MobileNetV3 在一次进行了改进&#xff0c;并将 AutoML 和其他新颖的思想融入到该移动端的深度学习框架中。谷歌发布了相关文章对…

c++中stringstream_文史哲与艺术中的数学_智慧树章节答案

文史哲与艺术中的数学_智慧树章节答案更多相关问题His mother told me that he ______ read quite well at the age of five. A) should B) would C)在三角形ABC中&#xff0c;a&#xff0c;b&#xff0c;c分别是角A&#xff0c;B&#xff0c;C的对边&#xff0c;且满足m(2b&am…

将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)

前言&#xff1a;docker自从诞生之初&#xff0c;就是运行在linux系统中&#xff0c;后来windows上也可以运行docker了&#xff0c;但是微软是通过自身的hyper-v技术&#xff0c;在你的windows系统中虚拟出来了一个小的linux虚拟主机&#xff0c;在它上面跑了个docker环境让你用…

有图有真相!这世界上,竟有人跟你长得一模一样!

全世界只有3.14 % 的人关注了爆炸吧知识你相信这个世界上有和你长得一模一样的人吗&#xff1f;我本来不信的看到这个摄影师的作品后真&#xff01;香&#xff01;冥冥之中&#xff0c;在平行宇宙在地球的另一端真的有另外一个你和你长得一模一样在生活&#xff0c;在呼吸老牌人…

两条线段的夹角 cesium_《原本》命题1.10 一条线段可以被分成两条相等的线段

命题1.10一条线段可以被分成两条相等的线段设&#xff1a;AB为一条直线。求作&#xff1a;平分为两条相等的线段。作等边三角形ABC(命题1.1)命题1.1已知一条线段可作一个等边三角形。作∠ACB的角平分线CD(命题1.9)命题1.9一个角可以切分成两个相等的角。那么&#xff1a;D 点就…

Minimal API Todo Sample

Minimal API Todo SampleIntro.NET 6 Preview 4 开始引入了 Minimal API 到如今的 RC1&#xff0c;Minimal API 也完善了许多并且修复了很多BUG&#xff0c;之前也写过文章介绍&#xff0c;可以参考:ASP.NET Core 6 Minimal API &#xff0c;不过只是写了一个 Hello World, 最早…

WPF基础到企业应用系列7——深入剖析依赖属性(三)

八. 只读依赖属性 我们以前在对简单属性的封装中&#xff0c;经常会对那些希望暴露给外界只读操作的字段封装成只读属性&#xff0c;同样在WPF中也提供了只读属性的概念&#xff0c;如一些 WPF控件的依赖属性是只读的&#xff0c;它们经常用于报告控件的状态和信息&#xff0c;…