Steeltoe之Service Discovery篇
程序员文章站
2022-03-16 23:45:37
在前文 "一窥Spring Cloud Eureka" 中,已经构建了基于Eureka的服务端与客户端,可用于实现服务注册与发现功能。而借助Steeltoe的类库,可以在.NET生态系统中使用Spring Cloud的现有模块。 Package 对于ASP.NET Core,使用 类库。 对于Con ......
在前文一窥spring cloud eureka中,已经构建了基于eureka的服务端与客户端,可用于实现服务注册与发现功能。而借助steeltoe的类库,可以在.net生态系统中使用spring cloud的现有模块。
package
对于asp.net core,使用steeltoe.discovery.clientcore
类库。
对于console/asp.net 4.x,使用steeltoe.discovery.eurekabase
类库。
服务发现
先建立一个asp.net core项目,其可以找到已在eureka的服务端注册的服务,并利用这些服务完成所需功能。
appsettings.json
首先设置eureka服务端地址,并确定当前应用程序能够发现服务但本身不会被注册为服务。
{ "eureka": { "client": { "serviceurl": "http://localhost:8765/eureka/", "shouldfetchregistry": true, "shouldregisterwitheureka": false } } }
startup.cs
加入discoveryclient服务并使用它。
public startup(iconfiguration configuration) { configuration = configuration; } public iconfiguration configuration { get; } public void configureservices(iservicecollection services) { services.adddiscoveryclient(configuration); services.addmvc(); } public void configure(iapplicationbuilder app, ...) { app.usemvc(); app.usediscoveryclient(); }
controller
从已注册的eureka客户端,即之前建立的spring cloud服务中获取数据。
public class homecontroller : controller { discoveryhttpclienthandler _handler; public homecontroller(idiscoveryclient client) { _handler = new discoveryhttpclienthandler(client); } public iactionresult index() { var client = new httpclient(_handler, false); var result = client.getstringasync("http://springcloud-eureka-client/hello").result; viewdata["message"] = result; return view(); } }
该服务的地址是它用于注册的application name。
启动asp.net core应用程序,可以看到页面显示了来自spring cloud服务的数据。
服务注册
再建立一个asp.net core api项目,并将其注册到eureka的服务端。
appsettings.json
该应用程序不需要发现服务,但需要在eureka服务端上注册服务。这里可以看到比上一项目更多的配置,因为它需要提供应用名称,端口号及主机名称。
{ "eureka": { "client": { "serviceurl": "http://localhost:8765/eureka/", "shouldfetchregistry": false, "shouldregisterwitheureka": true }, "instance": { "appname": "net-api", "port": 5000, "hostname": "localhost" } } }
startup.cs
与上一项目同样的配置。
controller
建立一个简单的api方法。
[route("api/[controller]")] [apicontroller] public class valuescontroller : controllerbase { // get api/values [httpget] public actionresult<string> get() { return "hello world net-api!"; } }
启动服务
可以在eureka服务端中看到新注册的服务。
调用服务
将上一个项目中所调用api的地址改成新服务的。
public iactionresult index() { var client = new httpclient(_handler, false); var result = client.getstringasync("http://net-api/api/values").result; viewdata["message"] = result; return view(); }
启动后,可以看到所显示的值已发生变化,因为其是从新的服务中取得的。