Consul初探-集成ocelot
前言
由于 Consul 的高可用性、丰富的API、友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的将 Consul 集成到 .NETCore 中,在 Ocelot 的集成方面也是非常的便捷,在 API Gateway 项目中,只需要通过引用一个包,就可以在项目中服务发现了。
今天要完成的架构图

上面就是今天要完成的业务架构图,客户端、Ocelot 网关、Consul 集群、计算器服务集群,这几个模块组成了基本的分布式网关模型。
建立 APIGateway 项目
建立空项目
首先我们建立一个空的 Asp.NetCore WebApplication 程序,对于一个简单的网关程序来说,空项目足够了,因为我们写代码的地方不多

Ocelot 的包引用

我们只需要引用 Ocelot.Provider.Consul ,即可完成 ocelot 和 consul 的依赖引用

配置网关
首先,我们需要为 ocelot 网关编写一个配置文件,ocelot 的配置功能非常丰富,具体参考:https://ocelot.readthedocs.io/en/latest/,本次我们只编写一个最简单的 ocelot.json 文件,该配置文件决定了客户端的请求该如何转发到从 Consul 发现到真正的服务实例中。
{
"ReRoutes": [
{
"UseServiceDiscovery": true, // 使用服务发现
"DownstreamPathTemplate": "/{url}", // 转发路由规则
"DownstreamScheme": "http", // 协议
"ServiceName": "node-1", // 服务名称
"LoadBalancerOptions": { // 负载均衡的算法(这里使用平均)
"Type": "RoundRobin"
},
"UpstreamPathTemplate": "/{url}", // 下游请求路由
"UpstreamHttpMethod": [ "Get", "Post" ], // 支持请求方法
"ReRoutesCaseSensitive": false // 路由大小写敏感设置
}
],
"GlobalConfiguration": { // 网关全局配置
"RequestKey": "OcRequestId",
"ServiceDiscoveryProvider": { // 服务发现的配置
"Host": "172.16.1.218",
"Port": 8500,
"ConfigurationKey": "node-1"
}
}
}
上面就是 ocelot 网关的配置,接下来,还需要在 Startup.cs 类中进行简单的配置。
进行服务注入
public void ConfigureServices(IServiceCollection services)
{
var ocelotConfig = new ConfigurationBuilder().AddJsonFile("ocelot.json", false, true).Build();
services.AddOcelot(ocelotConfig)
.AddConsul()
.AddConfigStoredInConsul();
}
首先加载 ocelot.json 文件,然后将配置注入到服务中
设置路由转发
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseHttpsRedirection()
.UseOcelot()
.Wait();
}
通过上面的代码,将 ocelot 注入请求管道中,到这里,配置的工作就已经完成了
创建一个计算器服务
为了演示网关转发和服务发现,我们需要构建一个简单的计算器服务,我准备使用该计算器服务运行两个实例,两个实例运行于同一台服务器上,分别侦听 12008/12009 端口,在服务启动后,该计算器服务将会自动的把自己注册到 Consul 代理服务器集群中,然后 APIGateway 网关从 Consul 发现 12008/12009 服务,并使用负载均衡的机制对两个服务进行调用。
为了方便演示,这里的计算器服务就使用上一篇的代码 进行测试了
运行计算器服务(12008/12009)
我们需要启动两个服务实例,然后注册到 Consul 中,启动服务

查看 Consul 代理服务器集群的状态

服务注册正常
启动 ocelot 网关

访问 Ocelot 网关
计算器服务(12008/12009) 服务实例提供的路由地址为:/home/add/{x:int}/{y:int} ,ocelot 网关的侦听地址为:http://172.16.10.227:12200 ,根据路由转发规则,ocelot 网关会把客户端的请求完整的转发到 12008/12009 服务实例上,所以我们可以通过下面的 url 请求服务,即:ocelot网关+12008/12009 路由,组合起来就是:http://172.16.10.227:12200/home/add/{x:int}/{y:int},那么真正的请求 url 为:http://172.16.10.227:12200/home/add/10/10,预期输出结果为:30

通过上面的输出,可以看到,从网关到真正的服务实例,这个环节已经打通了,通过不断的刷新网页请求,下方的两个服务实例总是一前一后的持续输出日志,这就足以证明我们在 ocelot 服务网关配置的负载均衡算法 "Type": "RoundRobin" 发挥了作用。
ocelot 配置文件管理
通过查看 Consul Web 控制台的界面的 Key/Value 菜单,发现 ocelot 将配置文件 ocelot.json 存储到 Consul 中了,我们可以在 Consul 中对网关进行可视化管理,修改保存即可。

结束语
从实验结果看,在 .NETCore 中集成 APIGateway 和 Consul 还是比较简单的事情,当然,大部分的项目在项目开放进程中,大概率是不会一次性使用到这么多组件的,不过我相信,随着架构的演进,这些项目最终也不得不考虑服务注册、发现、调度、负载均衡等这些问题,引入网关,就势在必行了。
.NETCore 集成 Consul 导读
源代码下载
本文所有源代码已托管到 Github ,欢迎下载测试 https://github.com/lianggx/Examples/tree/master/Ron.Consul ,如果觉得还行,请点击 star ,谢谢支持。
Consul初探-集成ocelot的更多相关文章
- .NetCore·集成Ocelot组件之完全解决方案
阅文时长 | 11.04分钟 字数统计 | 17672.8字符 主要内容 | 1.前言.环境说明.预备知识 2.Ocelot基本使用 3.Ocelot功能挖掘 4.Ocelot集成其他组件 5.避坑指 ...
- Consul初探-在深交之前先认识
Consul 是什么? Consul 官方站点:https://www.consul.io/ 首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现.配置.分段 ...
- 使用docker+consul+nginx集成分布式的服务发现与注册架构
一.环境说明: 1.一台虚拟机,该系统已经装好了docker: ip 192.168.10.224 虚拟网卡,与主机互通 操作系统rhel6 内核 2.6.32 64位 docker版本 1.7.1 ...
- Consul初探-服务注册和发现
前言 经过上一篇的学习,现在已经来到了服务注册发现环节:Consul 的核心功能就是服务注册和发现,Consul 客户端通过将自己注册到 Consul 服务器集群,然后等待调用方去发现服务,实现代理转 ...
- Consul初探-从安装到运行
前言 伟大领袖毛主席说过:实践是检验真理的唯一标准!经过上一篇的学习,我基本掌握了 Consul 的基本原理,接下来就是动手实践了:Consul 的部署方式分为两种,分别是二进制包和docker方式, ...
- Consul-template+nginx实现自动负载均衡
前言 consul-template 是 Consul 的一个守护程序,使用 consul-template 可以方便快速的实现对 Consul Key/Value 存储系统的访问,可以从 KV 系统 ...
- .Net Core微服务——网关(2):ocelot集成consul
有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略, ...
- 基于.net core微服务(Consul、Ocelot、Docker、App.Metrics+InfluxDB+Grafana、Exceptionless、数据一致性、Jenkins)
1.微服务简介 一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(RESTfu ...
- 庐山真面目之七微服务架构Consul集群、Ocelot网关集群和IdentityServer4版本实现
庐山真面目之七微服务架构Consul集群.Ocelot网关集群和IdentityServer4版本实现 一.简介 在上一篇文章<庐山真面目之六微服务架构Consul集群.Ocelot网 ...
随机推荐
- 第五章 Unity中的基础光照(1)
[TOC] 渲染总是围绕着一个基础问题:我们如何决定一个像素的颜色?从宏观上来说,渲染包括了两大部分:决定一个像素的可见性,决定这个像素上的光照计算.而光照模型用于决定在一个像素上进行怎样的光照计算. ...
- js4——字符转化
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- java多线程与线程池
1. 场景描述 以前多线程也常用,这次因需再页面上用到多线程,如下图,总结下,有需要的朋友可以参考下. 2. 解决方案 2.1 线程池概念 线程池官方定义不说了,通俗说下:池子的概念,事先(预定义)创 ...
- java前端与后端怎么选??
想做这个行业,就应该了解职能以及技能需求,这样学习才能更高效.我知道一些刚刚入行的小伙伴不清楚前端.后端.到底指的是什么?两者直接的区别 前端开发 前端开发主要涉及网站和App,用户能够从浏览器上或A ...
- python 拷贝文件夹下的文件 到 另一个文件夹
import os,shutil def copy_search_file(srcDir, desDir): ls = os.listdir(srcDir) for line in ls: fileP ...
- 使用Carthage集成Alamofire
Carthage相较于Cocoapods有着使用灵活,对目标工程改动小的优势,使得它越来越受欢迎.今天就对我使用Carthage集成FBSDK做一个记录. 1.首先https://github.com ...
- HDU5973 Game of Geting Stone(威佐夫博弈)
Two people face two piles of stones and make a game. They take turns to take stones. As game rules, ...
- 将项目部署到github的方法
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub. GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 We ...
- 【Hybird】274-Hybird App 应用开发中 5 个必备知识点复习
前言 我们大前端团队内部 ?每周一练 的知识复习计划还在继续,本周主题是 <Hybird APP 混合应用专题> ,这期内容比较多,篇幅也相对较长,每个知识点内容也比较多. 之前分享的每周 ...
- chrome 浏览器的使用技巧
前端工程师大部分的工作成果都需要在浏览器中查看,使用 chrome 浏览器的频率非常高.更好更优雅地使用 chrome,将 chrome 配置成一款趁手的浏览器,将极大地提升编程效率.本文将详细介绍 ...