当前位置: 移动技术网 > IT编程>开发语言>.net > Steeltoe之Service Discovery篇

Steeltoe之Service Discovery篇

2018年09月23日  | 移动技术网IT编程  | 我要评论

厕奴日志,遇水燃烧的物质,马蓉爸爸

在前文一窥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();
}

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网