南山做网站多少钱,沐浴露营销软文,电商网站建设考试题,凡客诚品公司介绍前言上篇文章《手把手教你使用spring clouddotnet core搭建微服务架构#xff1a;服务治理#xff08;-#xff09;》实际上只讲了服务治理中的服务注册#xff0c;服务与服务之间如何调用呢#xff1f;传统的方式#xff0c;服务A调用服务B#xff0c;那么服务A访问的是… 前言上篇文章《手把手教你使用spring clouddotnet core搭建微服务架构服务治理-》实际上只讲了服务治理中的服务注册服务与服务之间如何调用呢传统的方式服务A调用服务B那么服务A访问的是服务B的负载均衡地址通过负载均衡来指向到服务B的真实地址上篇文章已经说了这种方式的缺点。那么下面讲如何在spring clouddotnet core的应用下进行服务调用。代码实现假设一种场景有一个订单服务有一个产品服务其中产品服务是由两个服务节点组成一个集群。需求是订单服务访问产品服务的一个API接口。根据上一章文章的内容创建3个应用程序ServiceOne端口8010ServiceTwo端口8011ServiceThree8012。其中ServiceOne设置应用程序名称为order。ServiceTwo和ServiceThree的应用程序名称为product做成集群。ServiceOne.appsettings.json{Logging: {IncludeScopes: false,LogLevel: {Default: Warning}},spring: {application: {name: order}},eureka: {client: {serviceUrl: http://localhost:5000/eureka/},instance: {port: 8010}}
}ServiceOne.Controllers.ValuesController.CSprivate readonly DiscoveryHttpClientHandler _handler;private const string ProductUrl http://product/api/values;public ValuesController(IDiscoveryClient client, ILoggerFactory logFactory){_handler new DiscoveryHttpClientHandler(client);
}[HttpGet(product)]public async Taskstring GoProductAsync(){ var client new HttpClient(_handler, false); return await client.GetStringAsync(ProductUrl);
}ServiceTwo.appsettings.json{Logging: {IncludeScopes: false,LogLevel: {Default: Warning}},spring: {application: {name: product}},eureka: {client: {serviceUrl: http://localhost:5000/eureka/},instance: {port: 8011}}
}ServiceTwo.appsettings.json{Logging: {IncludeScopes: false,LogLevel: {Default: Warning}},spring: {application: {name: product}},eureka: {client: {serviceUrl: http://localhost:5000/eureka/},instance: {port: 8012}}
}为了展现访问的差异设置不同的返回值。ServiceTwo.Controllers.ValuesController.cs[HttpGet]public string Get(){ return ServiceTwo;
}ServiceThree.Controllers.ValuesController.cs[HttpGet]public string Get(){ return ServiceThree;
}同时启动这3个项目先看看服务中心http://localhost:5000/这个3个应用程序都已经注册到了服务中心。ServiceOne被注册到ORDERServiceTwo和ServiceThree注册到了PRODUCT。分别访问http://localhost:8011/api/values 返回ServiceTwohttp://localhost:8012/api/values 返回ServiceThree证明这两个服务是没有问题的。再访问http://localhost:8010/api/values/product如图所示分别返回了“ServiceTwo”和“ServiceThree”多刷新几次发现结果是来回变动的这说明服务中心帮我们实现了负载均衡。我们再做一个测试断开ServiceTwo这个应该程序。我们继续访问http://localhost:8010/api/values/product发现一次错误一次正常返回ServiceThree。30秒以后可配置再访问正常返回ServiceThree同时发现服务中心已经踢掉了端口为8011的应用程序ServiceTwo。后记通过上面3个实例我们模拟了分布式的调用场景其中Order访问Product集群的时候并没有指定具体的地址而是指定了服务名称product服务中心自动分配了地址并实现了负载均衡。联系实际应用场景配合docker我们可以快速的对某个服务进行添加不再需要维护服务节点。同时某个服务节点挂掉以后服务中心也会踢出这个服务节点会有短暂的不可用。结合CAP理论来说服务中心满足了AP。这篇文章讲解了服务之间的调用我们实际的应用场景还有各种客户端IOSAndriodWeb...来访问而服务一般是内网不对外暴露的所以客户端访问服务的时候就需要有一个专门对外暴露的入口那么就引入了下篇文章的API网关。所有代码均上传github。求推荐你们的支持是我写作最大的动力我的QQ群328438252,交流微服务。参考资料java部分spring cloud文档纯洁大神spring cloud系列.net部分SteeltoeOSS文档SteeltoeOSS源码原文地址http://www.cnblogs.com/longxianghui/p/7576736.html.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注