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

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

Steeltoe之Service Discovery篇的更多相关文章

  1. Service Discovery And Health Checks In ASP.NET Core With Consul

    在这篇文章中,我们将快速了解一下服务发现是什么,使用Consul在ASP.NET Core MVC框架中,并结合DnsClient.NET实现基于Dns的客户端服务发现 这篇文章的所有源代码都可以在G ...

  2. Service Discovery with Apache Curator

    Curator的介绍 Curator就是Zookeeper的一个客户端工具(不知道Zookeeper的同学可以到http://www.ibm.com/developerworks/cn/opensou ...

  3. Android WiFiDirect 学习(二)——Service Discovery

    Service Discovery 简介 在Android WifiDirect学习(一 )中,简单介绍了如何使用WifiDirect进行搜索——连接——传输. 这样会有一个问题,那就是你会搜索到到附 ...

  4. Open-Source Service Discovery

    Service discovery is a key component of most distributed systems and service oriented architectures. ...

  5. [译]Ocelot - Service Discovery

    原文 你可以指定一个service discovery provider,ocelot将使用它来找下游的host和port. Consul 下面的配置要放在GlobalConfiguration中.如 ...

  6. ZooKeeper之service discovery

    Zookeeper整体介绍 ZooKeeper is a centralized service for maintaining configuration information, naming, ...

  7. Service discovery

    https://www.cnblogs.com/dirt2/p/5987067.html Use Assigned Numbers in the Service Discovery Protocol ...

  8. 【转帖】Service Discovery: 6 questions to 4 experts

    https://highops.com/insights/service-discovery-6-questions-to-4-experts/ What’s Service Discovery? I ...

  9. Service Discovery in WCF 4.0 – Part 2 z

    Service Discovery in WCF 4.0 – Part 2 In the previous post I discussed about the basic usage of WCF ...

随机推荐

  1. 【Windows】cmd条件判断

    1.判断驱动器.文件或文件夹是否存在,用 if exist 语句: 2.判断某两个字符串是否相等,用 if "字符串1"=="字符串2" 语句: 3.判断某两个 ...

  2. 将iPhone5s中的相片批量下载到电脑中

    前言:目前我还在使用iPhone5s这款手机,不过由于自己的无知,在使用手机的过程中发现有些用户的体验不是很好,特别是将手机中的相片批量下载到电脑中这件小事,和Android系统相关的手机相比更不好玩 ...

  3. android用TextView实现跑马灯效果

    今天搞啦很久,其实很简单,就加几个属性就可以啦! 图如下 : 有的说要重写TextView方法,有的说要设置固定长度,但是我没重写也没有设置固定长度也弄出来啦!跑在2.3.3的手机上面.就是不知道其他 ...

  4. [APM] 解读APM技术分类和实现方式

    在讲了APM的历史.作用和实际案例之后,下面我们来了解一下APM技术分类和实现方式以及它未来的发展趋势.在这之前,我们首先需要了解一下典型的互联网或移动互联网应用的整个应用交付链. 图1 上面这张示意 ...

  5. Python访问MongoDB,并且转换成Dataframe

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/7/13 11:10 # @Author : baoshan # @Site ...

  6. java框架篇---struts之文件上传和下载

    Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...

  7. [转]JSTL 自定义方法报错Invalid syntax for function signature in TLD.

    Apache Tomcat/6.0.18 ${my:splitApply(apply)} <function> <name>splitApply</name> &l ...

  8. Java编程的逻辑 (84) - 反射

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  9. CAP原理中的一致性

    CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...

  10. Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...