欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Steeltoe之Service Discovery篇

程序员文章站 2022-06-30 12:10:16
在前文 "一窥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。

Steeltoe之Service Discovery篇

启动asp.net core应用程序,可以看到页面显示了来自spring cloud服务的数据。

Steeltoe之Service Discovery篇

服务注册

再建立一个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服务端中看到新注册的服务。

Steeltoe之Service Discovery篇

调用服务

将上一个项目中所调用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();
}

启动后,可以看到所显示的值已发生变化,因为其是从新的服务中取得的。
Steeltoe之Service Discovery篇