.net core+Spring Cloud学习之路 二
程序员文章站
2022-07-28 11:09:35
前言: 原本计划这次写一下搭建eureka群集。但是发现上次写的只是服务的注册,忘了写服务的发现,所以这次先把服务发现补上去。 需要using Pivotal.Discovery.Client; 这个时候发现名为order的有两个服务。 然后再次启动这三个.net core项目,并访问http:// ......
前言:
原本计划这次写一下搭建eureka群集。但是发现上次写的只是服务的注册,忘了写服务的发现,所以这次先把服务发现补上去。
- 我们基于上篇文章,再新建两个.net core web api项目,分别起名为order_one,order_two, 作为两个订单服务。我们以order_one为例。
- 同理先使用nuget添加pivotal.discovery.clientcore库。
- startup.cs 中添加
1 public void configureservices(iservicecollection services) 2 { 3 // services.adddiscoveryclient(configuration); 4 services.adddiscoveryclient(configuration); 5 services.addmvc().setcompatibilityversion(compatibilityversion.version_2_1); 6 }
1 public void configure(iapplicationbuilder app, ihostingenvironment env,iloggerfactory loggerfactory) 2 { 3 loggerfactory.addconsole(configuration.getsection("logging")); 4 loggerfactory.adddebug(); 5 if (env.isdevelopment()) 6 { 7 app.usedeveloperexceptionpage(); 8 } 9 else 10 { 11 app.usehsts(); 12 } 13 app.usediscoveryclient(); 14 app.usehttpsredirection(); 15 app.usemvc(); 16 }
需要using pivotal.discovery.client;
- appsettings.json 添加eureka服务配置
{ "logging": { "includescopes": false, "debug": { "loglevel": { "default": "warning" } }, "console": { "loglevel": { "default": "warning" } } }, "spring": { "application": { "name": "order" } }, "eureka": { "client": { "serviceurl": "http://localhost:8888/eureka/", "shouldfetchregistry": true }, "instance": { "port": 5001, "hostname": "localhost" } } }
- 修改launchsettings.json 端口改为5001
{ "iissettings": { "windowsauthentication": false, "anonymousauthentication": true, "iisexpress": { "applicationurl": "http://localhost:5001/", "sslport": 0 } }, "profiles": { "iis express": { "commandname": "iisexpress", "launchbrowser": true, "launchurl": "api/values", "environmentvariables": { "aspnetcore_environment": "development" } }, "order_one": { "commandname": "project", "launchbrowser": true, "launchurl": "api/order", "environmentvariables": { "aspnetcore_environment": "development" }, "applicationurl": "http://localhost:5001/" } } }
- 添加一个控制器,返回order one
[route("api")] public class valuescontroller : controller { // get api/values [httpget("value")] public string get() { return "order one"; } }
- 再建一个同样的项目,order_two
- 上述项目创建完成后,我们先启动spring cloud项目。然后同时启动三个.net core项目。这个时候我们刷新一下spring cloud页面。
这个时候发现名为order的有两个服务。
- 修改一下orderserver的控制器代码
[route("api")] public class valuescontroller : controller { discoveryhttpclienthandler _handler; private const string get_services_url = "http://order/api/value"; private ilogger<valuescontroller> _logger; public valuescontroller(idiscoveryclient client, iloggerfactory logfactory = null) { _handler = new discoveryhttpclienthandler(client); _logger = logfactory?.createlogger<valuescontroller>(); } [httpget("order")] public async task<string> getservices() { _logger?.loginformation("getservices"); var client = getclient(); return await client.getstringasync(get_services_url); } private httpclient getclient() { var client = new httpclient(_handler, false); return client; } }
然后再次启动这三个.net core项目,并访问http://localhost:5000/api/order,如图,他成功返回了order two,多刷新几次会发现返回的order one 和 order two是来回变的。
说明eureka服务中心帮我们实现了负载均衡。
- 这个时候,我们可以把order_one 或者 order_two关掉一个。我们再次访问http://localhost:5000/api/order会出现一次错误,然后eureka会自动把有问题的服务踢掉(时间可配置),再次访问不再有问题。
参考资料:
总结
现在网络上类似这样的文章很多,自己再单独写一份就是为了做个笔记,跟各位大牛交流一下,自己也学习学习。
推荐阅读