简介

  .net core使用ocelot---第一篇 简单使用  
  .net core使用ocelot---第二篇 身份验证使用 
  .net core使用ocelot---第三篇 日志记录 
  .net core使用ocelot---第四篇 限流熔断 
  .net core使用ocelot---第五篇 服务质量 
  .net core使用ocelot---第六篇 负载均衡

本文我们介绍用Spring Cloud Eureka Server介绍Ocelot的服务发现模块。

什么是服务发现

服务发现是自动检测这些设备在计算机网络上提供的设备和服务。服务发现协议(SDP)是帮助完成服务发现的网络协议。服务发现旨在减少用户的配置工作。

在Ocelot中我们可以使用许多的服务发现,比如Consul, Eureka等等。本文我使用Eureka进行介绍。Ocelot使用Steeltoe与Eureka进行通信,Eureka是一个开源项目,使.NET开发人员能够在云上构建弹性微服务时能实现满足行业标准的最佳实践。

我将使用Ocelot的7.1.0-unstable0011版本向您展示此功能。

Step1

首先创建两个API服务,一个是默认的ASP.NET Core Web API项目。在API网关发现我们的API服务之前,我们需要在Eureka服务上注册。

在appsettings.json添加一些配置

.    "spring": {
. "application": {
. "name": "service-a"
. }
. },
. "eureka": {
. "client": {
. "serviceUrl": "http://192.168.0.107:8761/eureka/",
. "shouldFetchRegistry": true,
. "validateCertificates": false
. },
. "instance": {
. "port": ,
. "instanceId": "192.168.0.103:9001",
. "hostName": "192.168.0.103",
. "healthCheckUrlPath": "/api/values/healthcheck",
. "statusPageUrlPath": "/api/values/info"
. }
. }

注意

  1. Service-a 是Ocelot发现服务的重要标志。
  2. ServiceUrl是Eureka Server的端点。
  3. 获得更多信息,看这里

  添加服务发现必要的代码

public class Startup
{
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, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseDiscoveryClient();
app.UseMvc();
}
}

  在这里,我将使用三个API服务来演示,两个API服务名称service-a具有不同的端口(9001和9003),一个API服务名称service-b。

Step2

新建一个APIGateway项目,添加名为ocelot.json的配置文件。

{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/a",
"UseServiceDiscovery": true,
"ServiceName": "service-a",
"UpstreamHttpMethod": [ "Get" ],
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": ,
"DurationOfBreak": ,
"TimeoutValue":
},
"FileCacheOptions": { "TtlSeconds": },
"LoadBalancerOptions": {
"Type": "RoundRobin"
}
},
{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"UpstreamPathTemplate": "/b",
"UseServiceDiscovery": true,
"ServiceName": "service-b",
"UpstreamHttpMethod": [ "Get" ],
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": ,
"DurationOfBreak": ,
"TimeoutValue":
},
"FileCacheOptions": { "TtlSeconds": }
}
],
"GlobalConfiguration": {
"RequestIdKey": "OcRequestId",
"AdministrationPath": "/administration",
"ServiceDiscoveryProvider": { "Type": "Eureka" }
}
}

  这里有几点需要注意。

  对于ReRoutes

  1. 将UseServiceDiscovery设为true。
  2. 将ServiceName值设为在API服务里定义的服务名称。
  3. 不用指明DownstreamHostAndPorts的值。
  4. 将LoadBalancerOptions设成RoundRobin。

  对于GlobalConfiguration

设置ServiceDiscoveryProvider的Type为Eureka。这是使用Eureka至关重要的配置。

回到Program.cs,我们需要让Ocelot可以使用。

public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:9000")
.ConfigureAppConfiguration((hostingContext, config) =>
{
config
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("ocelot.json")
.AddEnvironmentVariables();
})
.ConfigureServices(s =>
{
s.AddOcelot();
})
.Configure(a =>
{
a.UseOcelot().Wait();
})
.Build();
}

Step3

让Eureka跑起来。

  如你所见,Eureka服务启动起来了,但是没有可以使用的实例。

注意

为了在你的电脑上跑Eureka服务,你可以按照下面的步骤尝试。

  1. 安装Java 8 的JDK
  2. 安装Maven3.X
  3. 复制Spring Cloud Samples Eureka 代码库(https://github.com/spring-cloud-samples/eureka.git
  4. 转到eureka服务的目录(eureka)并使用mvn spring-boot:run启动它

Step4

我们如何注册我们的服务?只需运行我们的项目,我们就会得到service-a实例。

当运行我们的API服务,你就会发现service-a 运行在Eureka 服务里了

  好了,启动我们的APIGateway,不幸的是,当我们运行起项目。

  查看异常信息,我们忘了在APIGateway项目中配置Eureka。在appsettings.json添加下面的配置。

"spring": {
"application": {
"name": "service-gw"
}
},
"eureka": {
"client": {
"serviceUrl": "http://192.168.0.107:8761/eureka/",
"shouldRegisterWithEureka": false,
"validateCertificates": false
},
"instance": {
"port": ,
"instanceId": "192.168.0.103:9000",
"hostName": "192.168.0.103"
}
}

  重新启动APIGateway,终于正常了。

  

  通过APIGat访问service-a

  通过APIGateway访问未启动的service-b

  毫无疑问我们不可能访问service-b

  启动后

  再次启动

  最后注册另一个service-a

  访问service-a你得到的结果有时来自9001,有时来自9003 。因为我们负载均衡算法设为RoundRobin。

  当我们停止service-a的一个服务,我们依然可以访问,但是终止的那个服务不能访问。

  源码在此

总结

本文介绍了Ocelot使用Eureka实现服务发现的简单示例。当让还有consul也可以实现服务发现,下篇介绍。

.net core使用ocelot---第七篇 服务发现的更多相关文章

  1. Ocelot(三)- 服务发现

    Ocelot(三)- 服务发现 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10907856.html 源码地址:https ...

  2. Ocelot中文文档-服务发现

    Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...

  3. .NET Core微服务实施之Consul服务发现与治理

    .NET Core微服务实施之Consul服务发现与治理   Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downl ...

  4. Ocelot(十一)- 服务发现

    Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...

  5. Ocelot 网关 和 consul 服务发现

    服务发现 Consul 一.安装和启动 下载 [Consul](https://www.consul.io/downloads.html) 下载完成后,解压,只有一个consul.exe,把目录添加到 ...

  6. .net5+nacos+ocelot 配置中心和服务发现实现

    最近一段时间 因公司业务需要,需要使用.net5做一套微服务的接口,使用nacos 做注册中心和配置中心,ocelot做网关. 因为ocelot 支持的是consol和eureka,如果使用nacos ...

  7. Docker与k8s的恩怨情仇(七)—— “服务发现”大法让你的内外交互原地起飞

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 第一章:Docker与k8s的恩怨情仇(一)-成为PaaS前浪的Cloud Foundry 第二章:Dock ...

  8. Ocelot简易教程(四)之请求聚合以及服务发现

    上篇文章给大家讲解了Ocelot的一些特性并对路由进行了详细的介绍,今天呢就大家一起来学习下Ocelot的请求聚合以及服务发现功能.希望能对大家有所帮助. 作者:依乐祝 原文地址:https://ww ...

  9. asp.net core microservices 架构之eureka服务发现

    一 简介 微服务将需多的功能拆分为许多的轻量级的子应用,这些子应用相互调度.好处就是轻量级,完全符合了敏捷开发的精神.我们知道ut(单元测试),不仅仅提高我们的程序的健壮性,而且可以强制将类和方法的设 ...

随机推荐

  1. POI报表打印

    一.Excel报表(POI) 1.需求说明 在企业级应用开发中,Excel报表是一种最常见的报表需求.Excel报表开发一般分为两种形式: 1.为了方便操作,基于Excel的报表批量上传数据 2.通过 ...

  2. 第07组 Alpha冲刺(6/6)

    队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:博客生成的逻辑 展示GitHub当日代码/文档签入记录:(组内共用,已询问过助教小姐姐 ...

  3. 【CNN】--- 卷积过程中RGB与灰度的区别

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/hacker_Dem_br/article/ ...

  4. MySQL Group By 实例讲解(二)

    mysql group by使用方法实例讲解 MySQL中GROUP BY语句用于对某个或某些字段查询分组,并返回这个字段重复记录的第一条,也就是每个小组(无排序)里面的第一条. 本文章通过实例向大家 ...

  5. jmeter常用四种断言

    jmeter常用四种断言 一.Response Assertion(响应断言)二.Size Assertion(数据包字节大小断言)三.Duration Assertion(持续时间断言)四.bean ...

  6. 包含MANIFEST.MF的jar可执行应用指定classpath及spring boot应用增量升级打包实现

    对于不包含MANIFEST.MF,或jar包中的MANIFEST.MF未指定MainClass的jar,可以通过java命令行选项-classpath指定classpath.但是如果是包含MainCl ...

  7. 修改mysql开启innodb支持

    1.找到/etc/my.cnf文件 a. 修改默认引擎 b. 注释掉: loose-skip-innodb c.打开被注释掉的innodb配置 2.重启服务器  /etc/init.d/mysql r ...

  8. jQuery.validator.addMethod自定义验证方法

    在开发中用到了jQuery的validate控件,有时需要自定义验证方法.我们可以通过jQuery.validator.addMethod()来实现,下面是例子: <!DOCTYPE html ...

  9. (转)JVM原理讲解和调优

    背景:jvm实际调优在面试时候经常被问到,所以有必要认真总结一番. 转自:JVM原理讲解和调优 四.JVM内存调优 首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存 ...

  10. idea2019.2激活码到2020.7.1【已失效】,有另外的

    ZKVVPH4MIO-eyJsaWNlbnNlSWQiOiJaS1ZWUEg0TUlPIiwibGljZW5zZWVOYW1lIjoi5o6I5p2D5Luj55CG5ZWGIGh0dHA6Ly9pZ ...