前言 前不久看到一篇<.NET Core 在腾讯财付通的企业级应用开发实践>,给现在研究.Net Core及想往微服务方向发展的人来了一剂强心针.于是我也就立刻去下Ocelot的源码及去阅读官方文档. Ocelot的Github地址:https://github.com/TomPallister/Ocelot 官方文档地址:http://ocelot.readthedocs.io 环境及安装 目前版本的Ocelot是基于.Net core 2.0开发的,所以你的项目也得是.net core2.…
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly Tracing集成.这些功能只都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明. 介绍 简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道.当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage…
1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能.通常,网关也是提供REST/HTTP的访问API.服务端通过API-GW注册和管理服务. 2.Ocelot介绍 Ocelot是用.net Core实现的一款开源的网关,Ocelot其实就是一组按照顺序…
场景: 由一次大的项目改动引起的app端api不兼容问题,这时候就需要对api做版本控制了,权衡之后因为用户不多,选择了强更,没人想在已经写了8000行代码的单个svc文件中维护好几个版本的接口或者继续新建svc(wcf配置较繁琐),但暴露出的版本控制问题还是要解决的,不能每次都强更呀. api版本控制方案: 分项目进行版本控制,一个项目一个版本号,维护两个版本号,分开部署,根据其版本号路由到对应host. 根据当前项目情况,为了同时完成技术迭代(因没有code review,多次经手,wcf中…
网关的负载均衡 当下游拥有多个节点的时候,我们可以用DownstreamHostAndPorts来配置 { "UpstreamPathTemplate": "/Api_A/{controller}/{action}", "DownstreamPathTemplate": "/api/{controller}/{action}", "DownstreamScheme": "https",…
目标 我们的目标是要搭建一个API控制器的项目,API控制器提供业务服务. 一.开发框架搭建 1.开发前准备 开发前,我们需要下载如下软件,安装过程略: (1) 开发工具:VS2017 (2) 数据库:MySQL (3) 缓存数据库:Redis (4) 查看缓存数据库工具:RedisDesktopManager (5) API接口调试工具:PostMan (6) 数据库模型设计:PowerDesigner (7) 数据库管理工具:SQLyog 2.创建项目 创建ASP.NET Core Web…
4.加入数据库支持 下面我们为项目加入数据库支持,修改appsettings.json: 然后我们要生成实体类,打开VS工具->NuGet包管理器->程序包管理器控制台: 输入命令: Scaffold-DbContext "server=.;userid=root;pwd=root;port=3306;database=chainstore;sslmode=none;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -…
6.加入日志功能 日志我们选用log4net,首先引入程序包: 选择2.0.8版本安装.然后在项目根目录新增log4net的配置文件log4net.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- This section contains the log4net configuration settings --> <log4net&g…
5.加入缓存支持 我们希望为项目增加缓存支持,我们选择Redis做为缓存数据库. 首先,我们在Services目录增加一个缓存接口类ICacheService: using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace ChainStoreAPI.Services { public interface ICacheService { /// …
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.啥是API网关? API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端实现和微服务应用程序之间的沟通方式.以前的话,客户端不得不去请求微服务A(假设为Customers),然后再到微服务B(假设为Orders),然后是微服务C(假设为Invoices).客户端需要去知道怎么去一起来消费这三个不同的service.使用API网关,我们可以抽象所有这些复杂性,并创建客户端…