.net core使用ocelot---第七篇 服务发现
简介
.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"
- . }
- . }
注意
- Service-a 是Ocelot发现服务的重要标志。
- ServiceUrl是Eureka Server的端点。
- 获得更多信息,看这里
添加服务发现必要的代码
- 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
- 将UseServiceDiscovery设为true。
- 将ServiceName值设为在API服务里定义的服务名称。
- 不用指明DownstreamHostAndPorts的值。
- 将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服务,你可以按照下面的步骤尝试。
- 安装Java 8 的JDK
- 安装Maven3.X
- 复制Spring Cloud Samples Eureka 代码库(https://github.com/spring-cloud-samples/eureka.git)
- 转到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---第七篇 服务发现的更多相关文章
- Ocelot(三)- 服务发现
Ocelot(三)- 服务发现 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10907856.html 源码地址:https ...
- Ocelot中文文档-服务发现
Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...
- .NET Core微服务实施之Consul服务发现与治理
.NET Core微服务实施之Consul服务发现与治理 Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downl ...
- Ocelot(十一)- 服务发现
Ocelot允许您指定服务发现提供程序,并使用它来查找Ocelot正在将请求转发给下游服务的主机和端口.目前,这仅在GlobalConfiguration部分中受支持,这意味着所有ReRoute将使用 ...
- Ocelot 网关 和 consul 服务发现
服务发现 Consul 一.安装和启动 下载 [Consul](https://www.consul.io/downloads.html) 下载完成后,解压,只有一个consul.exe,把目录添加到 ...
- .net5+nacos+ocelot 配置中心和服务发现实现
最近一段时间 因公司业务需要,需要使用.net5做一套微服务的接口,使用nacos 做注册中心和配置中心,ocelot做网关. 因为ocelot 支持的是consol和eureka,如果使用nacos ...
- Docker与k8s的恩怨情仇(七)—— “服务发现”大法让你的内外交互原地起飞
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 第一章:Docker与k8s的恩怨情仇(一)-成为PaaS前浪的Cloud Foundry 第二章:Dock ...
- Ocelot简易教程(四)之请求聚合以及服务发现
上篇文章给大家讲解了Ocelot的一些特性并对路由进行了详细的介绍,今天呢就大家一起来学习下Ocelot的请求聚合以及服务发现功能.希望能对大家有所帮助. 作者:依乐祝 原文地址:https://ww ...
- asp.net core microservices 架构之eureka服务发现
一 简介 微服务将需多的功能拆分为许多的轻量级的子应用,这些子应用相互调度.好处就是轻量级,完全符合了敏捷开发的精神.我们知道ut(单元测试),不仅仅提高我们的程序的健壮性,而且可以强制将类和方法的设 ...
随机推荐
- hbase 整合ranger
一.安装hbase插件 1.解压安装插件 从target目录下拷贝ranger-2.1.0-SNAPSHOT-hbase-plugin.tar.gz到hbase集群,你的这个包的版本可能跟我不一致. ...
- Spring Boot YML 掀翻 Properties!!
.properties 配置文件大家应该都很熟悉,键值对嘛,.yml 配置文件栈长也是从 Spring Boot 开始了解到的. 那么,这两种格式的配置文件到底有哪些区别呢?哪个更好?能不能替换代替? ...
- go 指南学习笔记
1 If for 后面没有小括号.后面的花括号,要在当前行,并且中间有内容,右花括号要单独一行. 因为go会格式化代码,自动插入分号. 2 函数和方法的区别: 方法需要有一个接受者(select ...
- Tomcat的安装以及环境变量的配置
目录 下载 解压并配置环境变量 测试 关闭服务 Tomcat启动时,控制台和IDEA控制台中文乱码解决方案 下载 官方网址:Apache Tomcat® https://tomcat.apache.o ...
- SRS之安装与使用
1. 安装 1.1 github 获取源码 git clone https://github.com/ossrs/srs.git 1.2 编译 1.2.1 关闭防火墙和 selinux 先关闭防火墙, ...
- php 5 与7有什么区别
PHP 7.0使用新版的ZendEngine引擎,带来了许多新的特性,其与相比,有如下特性: 性能提升:PHP7比PHP5.0性能提升了两倍. 全面一致的64位支持. 以前的许多致命错误,现在改成抛出 ...
- uploadifive 1.1.2 动态传参
之前用过Flash版本的uploadify,写过一篇关于uploadify动态传参的文章(点击打开链接).后来有了HTML5版本的上传控件,叫uploadifive,测试着用了一下,效果还不错.这里主 ...
- [LeetCode] 284. Peeking Iterator 瞥一眼迭代器
Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking ...
- kali 扫描之burp Suite学习笔记1
1 安装 2 burs功能图解 3 工具栏详解 4 实战 (1) 网络配置 一台kali 一台msf 网络采用nat nat网络设置方法: 查看路由 配置文件 (2) 代理设置 bur代理设置 浏览器 ...
- pdflatex 插入eps图片
1. 将eps图片转成pdf或者将pdf图片转成eps,也就是说一张图片有pdf.eps两种格式.方法一: \includegraphics{pic} %不要扩展名.这样pdflatex自动调相应的p ...