回到目录

网关在硬件里有自己的定义,而在软件架构里也有自己的解释,它就是所有请求的入口,请求打到网关上,经过处理和加工,再返回给客户端,这个处理过程中当然就是网关的核心,也是Ocelot的核心,我们可以把用户授权,校验,缓存,认证等很多关注点在网关中实现!

善友大哥收录的:http://www.csharpkit.com/2018-01-06_69695.html

原文地址:http://www.cnblogs.com/axzxs2001/p/8005041.html

Github地址:https://github.com/TomPallister/Ocelot

定义

API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

例如:手机和WEB网站都需要调用API接口,它们直接与网关进行通讯,而不用关心具体的服务是A还是B

项目Demo

安装Ocelot包:Install-Package Ocelot

建立两个项目,网关主项目,DemoA和DemoB,这样A和B两个项目都会指定网关项目,通过访问网关就可以访问这两个项目了.

Gateway网关项目,端口是5000

DemoA项目,端口是5001

DemoB项目,端口是5002

在Gateway项目添加配置文件configuration.json,将它复制到输出目录,右键-属性-始终复制

{
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/polly",
"DownstreamScheme": "http",
"DownstreamPort": ,
"DownstreamHost": "localhost",
"UpstreamPathTemplate": "/api/polly",
"UpstreamHttpMethod": [ "Get" ],
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": ,
"DurationOfBreak": ,
"TimeoutValue":
},
"HttpHandlerOptions": {
"AllowAutoRedirect": false,
"UseCookieContainer": false
},
"AuthenticationOptions": {
"AuthenticationProviderKey": "",
"AllowedScopes": []
}
}
]
}

现时在网关里配置子服务时,也支持路由规则,如控制器,Action时,如果你希望匹配以某个字符作为前缀的Restful标准的,可以通过下面代码进行配置

   {
"DownstreamPathTemplate": "/api/{controller}",
"DownstreamScheme": "http",
"DownstreamPort": ,
"DownstreamHost": "localhost",
"UpstreamPathTemplate": "/api/{controller}",
"UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ],
},

在网关的启动时,把配置文件注入

        public static IWebHost BuildWebHost(string[] args)
{
IWebHostBuilder builder = new WebHostBuilder(); //注入WebHostBuilder return builder.ConfigureServices(service =>
{
service.AddSingleton(builder);
}).ConfigureAppConfiguration(conbuilder =>
{
conbuilder.AddJsonFile("configuration.json");
}).UseKestrel()
.UseUrls("http://*:5000")
.UseStartup<Startup>()
.Build();
}

添加ocelot的中间件和服务

services.AddOcelot(Configuration as ConfigurationRoot);

app.UseOcelot().Wait();

调试多个项目,这时我们的 5000和5001端口都会被监听,我们输入之间配置的api/polly路径,然后就可以看到它会自己绑定到5001这个子站上!

这样,我们的网关就算是跑起来了,所有项目有自己的路由模版,根据路由来查找服务!所有服务在外面看上去都像一个网站!

回到目录

LindDotNetCore~Ocelot实现微服务网关的更多相关文章

  1. 解决微服务网关Ocelot使用AddStoreOcelotConfigurationInConsul后请求404问题

    一个小插曲,最近研究 netcore 微服务网关,在使用AddStoreOcelotConfigurationInConsul将配置存到consul后,任何经过网关的请求都出现404,并且没有任何有用 ...

  2. 微服务网关Ocelot加入IdentityServer4鉴权-.NetCore(.NET5)中使用

    Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现 Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocel ...

  3. .net core中使用Bumblebee架设微服务网关

    Bumblebee是款基于.net core开发开源的http服务网关,经过最近版本的完善在功能足以满足作为微服务网关的需要.在微服务网关功能中它提供了应用服务负载,故障迁移,安全控制,监控跟踪和日志 ...

  4. Bumblebee微服务网关的部署和扩展

    Bumblebee是.netcore下开源基于BeetleX.FastHttpApi扩展的HTTP微服务网关组件,它的主要作用是针对WebAPI集群服务作一个集中的转发和管理:作为应用网关它提供了应用 ...

  5. 微服务-网关-node.js by 大雄daysn

    目录 序言 一.node.js入门1.1 下载并安装1.2 从helloworld到一个web应用1.3 Express框架二.node.js搭建网关 三.node.js集群搭建   序言 首先一个问 ...

  6. 使用 Node.js 搭建微服务网关

    目录 Node.js 是什么 安装 node.js Node.js 入门 Node.js 应用场景 npm 镜像 使用 Node.js 搭建微服务网关 什么是微服务架构 使用 Node.js 实现反向 ...

  7. springcloud使用Zuul构建微服务网关入门

    为什么要使用微服务网关 不同的微服务一般会经过不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求. 如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微 ...

  8. springcloud(十)-Zuul微服务网关

    为什么要使用微服务网关 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服 ...

  9. 微服务网关哪家强?一文看懂Zuul, Nginx, Spring Cloud, Linkerd性能差异

      导语:API Gateway是实现微服务重要的组件之一.面对诸多的开源API Gateway,如何进行选择也是架构师需要关注的焦点.本文作者对几个较大的开源API Gateway进行了压力测试,对 ...

随机推荐

  1. 第一篇:tz师兄【附面试题总结】

    本篇文章包含三部分: 师兄故事 面试经历 面试资源分享 师兄故事 tz师兄是一位及其低调的小伙,也是在班级中我比较欣赏的少年. 2017年大学毕业,原资源勘察工程专业. 大学期间自学java,之后进入 ...

  2. 【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  3. bzoj3289 Mato的文件管理 莫队+树状数组

    求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...

  4. 虚拟机console基础环境部署——系统基础环境

    1. 概述2. 工具类安装2.1 安装vim2.2 安装tree2.3 安装expect2.4 安装lsof3. 编译环境类安装 1. 概述 本系列博客是在最小化安装CentOS6.5的基础上,通过配 ...

  5. Python-常用 Linux 命令的基本使用

    常用 Linux 命令的基本使用 操作系统 作用:管理好硬件设备,让软件可以和硬件发生交互类型 桌面操作系统 Windows macos linux 服务器操作系统 linux Windows ser ...

  6. Android之微信朋友圈UI实现--ExpandableListView+GridView

    PS:我们都知道微信,更是知道朋友圈,很多人在朋友圈里卖起了化妆品,打入广告等为自己做一下推广,里面会附带一写好看的图片,上面有标题,有描述,整体布局每场的美观,那么这是怎么实现的呢,有些人可能会单个 ...

  7. Django模板修炼

    引言:由于我们在使用Django框架时,不会将HTML代码采用硬编码的方式,因为会有以下缺点: 1:对页面设计进行的任何改变都必须对 Python 代码进行相应的修改. 站点设计的修改往往比底层 Py ...

  8. 面试挂在了 LRU 缓存算法设计上

    好吧,有人可能觉得我标题党了,但我想告诉你们的是,前阵子面试确实挂在了 RLU 缓存算法的设计上了.当时做题的时候,自己想的太多了,感觉设计一个 LRU(Least recently used) 缓存 ...

  9. [译] PEP 255--简单的生成器

    我正打算写写 Python 的生成器,然而查资料时发现,引入生成器的 PEP 没人翻译过,因此就花了点时间翻译出来.如果在阅读时,你有读不懂的地方,不用怀疑,极有可能是我译得不到位.若出现这种情况,我 ...

  10. windows,分割路径.得出目录

    #include <windows.h> #include <vector> #include <stdio.h> #include <string> ...