[译]Ocelot - Logging】的更多相关文章

原文 Ocelot使用标准的日志接口ILoggerFactory和ILogger<T>.它们封装在IOcelotLogger 和 IOcelotLoggerFactory中,因为ocelot要添加一些额外的信息(eg:request id)到日志中去. 还有一个内置的全局error handler,用来捕获异常并打日志. 如果日志级别设置为trace, ocelot将log starting, finishing和任何中间件抛出的异常. Warning 如果日志是设置输出到Console的,那…
原文 目录 Big Picture Getting Started Configuration Routing Request Aggregation Service Discovery Authentication TODO Authorisation TODO Rate Limiting Caching Quality of Service Headers Transformation Claims Transformation Logging Tracing Request Id / Co…
原文 Ocelot专为.NET Core而设计. .NET Core 2.1 安装 首先需要创建一个netstandard2.0项目,然后再通过nuget安装. Install-Package Ocelot Configuration 下面是个最基本的最简单的ocelot.json文件的内容. { "ReRoutes": [], "GlobalConfiguration": { "BaseUrl": "https://api.mybus…
原文 可以针对每个ReRoute设置对下游服务的熔断器circuit breaker.这部分是通过Polly实现的. 将下面的配置添加到一个ReRoute下面去. "QoSOptions": { "ExceptionsAllowedBeforeBreaking":3, "DurationOfBreak":5, "TimeoutValue":5000 } ExceptionsAllowedBeforeBreaking必须大于0.…
原文 Ocelot支持基本的缓存,目前Ocelot的缓存是通过CacheManager project实现的. 下面的示例展示了如何启用缓存: s.AddOcelot() .AddCacheManager(x => { x.WithDictionaryHandle(); }) 为了在路由中使用缓存,需要在ReRoute中添加下面的配置: "FileCacheOptions": { "TtlSeconds": 15, "Region": &q…
原文 Ocelot支持对上游做访问限流,这样就可以保证下游不要负载太大了. 如果要启用访问限流,需要做如下配置: "RateLimitOptions": { "ClientWhitelist": [], "EnableRateLimiting": true, "Period": "1s", "PeriodTimespan": 1, "Limit": 1 } Clien…
原文 你可以指定一个service discovery provider,ocelot将使用它来找下游的host和port. Consul 下面的配置要放在GlobalConfiguration中.如果你没有指定host和port,那么就需要一个service discovery provider,默认使用的是Consul. "ServiceDiscoveryProvider": { "Host": "localhost", "Port…
原文 Aggregate ReRoutes用来组合多个ReRoutes,将它们的响应结果映射到一个响应中返回给客户端. 为了使用Aggregate ReRoutes,你必须像下面的ocelot.json中做些配置. 在下面的例子中,有两个ReRoutes,且它们都有一个Key属性,我们将使用ReRoute里面的key在Aggregate中组合ReRoute.Aggregate 和 ReRoutes的UpstreamPathTemplate不能重复.Aggregate可以使用ReRoute中出了R…
原文 这里有一个配置的样例.配置主要有两个部分.一个是ReRoutes数组,另一个是GlobalConfiguration.ReRoute告诉Ocelot怎么处理上游的请求.Global configuration能让我们覆盖一些ReRoute的一些配置. { "ReRoutes": [], "GlobalConfiguration": {} } 这里是一个ReRoutes的配置样例(你不需要设置下面所有的配置): { "DownstreamPathTem…
原文 Ocelot主要的功能就是将http请求转发到对应的下游服务上去. Ocelot将一个请求路由到另外一个路由的动作叫做ReRoute.为了能让Ocelot能正常工作,需要在配置中设置ReRoute. { "ReRoutes": [ ] } 配置ReRoute需要添加一个ReRoutes json 数组. { "DownstreamPathTemplate": "/api/posts/{postId}", "DownstreamSc…
原文 可以为HttpClient添加delegating handlers. Usage 为了添加delegating handler需要做两件事. 首先如下一样创建一个类. public class FakeHandler : DelegatingHandler { protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancell…
原文 可以对下游的服务进行负载均衡. 提供了下面几种负载均衡: LeastConnection - tracks which services are dealing with requests and sends new requests to service with least existing requests. The algorythm state is not distributed across a cluster of Ocelot's. RoundRobin - loops…
原文 Ocelot可以通过header的形式发送一个requestid.ocelot会将这个requestid转发到下游服务. 如果在日志配置中设置了IncludeScopes为true,那么request id会打在日志里面. 可以通过两种方式使用requestid. 1.Global - 配置如下GlobalConfiguration.这将作用于所有的请求 "GlobalConfiguration": { "RequestIdKey": "OcRequ…
原文 Ocelot是使用的Butterfly这个项目来实现这个的. 在ocelot要使用tracing, 首先得安装相应的包: Install-Package Ocelot.Tracing.Butterfly 然后再ConfigureServices方法里面添加如下代码: services .AddOcelot() // 下面这个扩展方法来自Ocelot.Tracing.Butterfly包 .AddButterfly(option => { // 这个是butterfly服务器的地址 opti…
原文 用户授权后才能使用此功能. 用户获得授权后claims将被发送到claims transformation中间件.用户授权后,我们首先调用claims to headers middleware,claims to query string parameters middleware. 在ReRoute配置中添加名为AddClaimsToRequest, AddHeadersToRequest, AddQueriesToRequest的字典信息. 字典的条目标识ocelot将怎么转换,键会…
原文 Add to Request 为上游请求添加请求头,只需如下一样将下面的配置添加到一个ReRoute里: "UpstreamHeaderTransform": { "Uncle": "Bob" } 上面的例子中添加了一个键为Uncle,值为Bob的请求头. 支持Placeholders. Add to Response 还可以为下游服务添加响应头, 如下一样将下面的配置添加到一个ReRoute里: "DownstreamHeade…
原文 使用这个特性的时候要小心点. 可以如下一样提供一些中间件用以覆盖默认的中间件: var configuration = new OcelotPipelineConfiguration { PreErrorResponderMiddleware = async (ctx, next) => { await next.Invoke(); } }; app.UseOcelot(configuration); PreErrorResponderMiddleware - 最先运行的中间件 PreAu…
在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败.这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况.API Gateway不应该被阻断并处于无限期等待下游服务的状态.但是,如何处理这种失败依赖于特定的场景和具体服务.如果是产品信息服务无响应,那么API Gateway就应该给客户端返回一个错误. Ocelot 是一个使用.NET Core平台上的一个API Gateway,最近我在参与这个项目的开发,开发完成第一个被项目作者认同功能就是使用Polly…
前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网络层等等更底层的环境呢?让我们先来简单的了解一下TCP/IP的五层模型.     (图片出自http://www.cnblogs.com/qishui/p/5428938.html)   具体的每一层的工作原理想必大家都已经滚瓜烂熟了,笔者也不在重复的复述这内容.回到上面的问题,为何API网关需要工作在应用层上的问题就变得一目了然,物理层面的网关是交给物理设备进行的,例如物理防火墙,而…
[.NET Core项目实战-统一认证平台]开篇及目录索引 一.什么是RPC RPC是"远程调用(Remote Procedure Call)"的一个名称的缩写,并不是任何规范化的协议,也不是大众都认知的协议标准,我们更多时候使用时都是创建的自定义化(例如Socket,Netty)的消息方式进行调用,相比http协议,我们省掉了不少http中无用的消息内容.因此很多系统内部调用仍然采用自定义化的RPC调用模式进行通信,毕竟速度和性能是内网的关键指标之一,而标准化和语义无关性在外网中举足…
KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, github地址: https://github.com/tintoy/dotnet-kube-client/,还有一个官方的SDK https://github.com/kubernetes-client/csharp/  ,这两个sdk的设计哲学上是不一样的, 官方的客户端使用代码生成,代码生成的使用是…
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.如何添加客户端授权? 在了解如何进行客户端授权时,我们需要了解详细的授权流程,在[.NET Core项目实战-统一认证平台]第八章 授权篇-Identit…
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础功能. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.功能描述 限流就是为了保证网关在高并发或瞬时并发时,在服务能承受范围内,牺牲部分请求为代价,保证系统的整体可用性而做的安全策略,避免单个服务…
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我们介绍了如何扩展Ocelot网关,并实现数据库存储,然后测试了网关的路由功能,一切都是那么顺利,但是有一个问题未解决,就是如果网关配置信息发生变更时如何生效?以及我使用其他数据库存储如何快速实现?本篇就这两个问题展开讲解,用到的文档及源码将会在GitHub上开源,每篇的源代码我将用分支的方式管理,本篇使用的分支为course2. 附文档及源码下载地址:[https://github.com/jinyancao/CtrAuthP…
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用.本篇我们将介绍如何实现网关自定义客户端授权,实现可以为不同的接入客户端设置不同的访问权限. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.功能描述 网关重点功能之一鉴权,需要实现对不同的客户端进行授权访问,禁止访问未经授权的路由地址,且需要对无权访问的请求,返回通用的格式. 比如网关有1-10个可…
资源准备: 下载开源项目 新建oracle表: -- ---------------------------- -- Table structure for OcelotGlobalConfiguration -- ---------------------------- CREATE TABLE OcelotGlobalConfiguration ( Id ) NOT NULL , GatewayName NVARCHAR2() NOT NULL , RequestIdKey NVARCHAR…
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间的时间差,以秒计算 print(time.altzone)      输出: -32400 time.asctime() 将struct时间格式转为可读的时间格式"Fri Aug 19 11:14:16 2016" print(time.asctime()) 输出: Mon Jan  2…
声明:原创翻译,转载请注明出处!http://www.cnblogs.com/mewmicro/p/6432507.html 注:作者Petru Marginean,2007/09/05   日志记录是用于故障排除和维护软件系统的关键技术.Petru提供了一种类型安全,线程安全和可移植的C ++日志框架. 日志记录是用于故障排除和维护软件系统的关键技术.要获取它所提供的信息也十分简单,既不要求具备编程语言的知识,也不需要专用工具.日志是一个判断应用程序是否正常运行的有效手段.良好的日志机制可以有…
本文是PLY (Python Lex-Yacc)的中文翻译版.转载请注明出处.这里有更好的阅读体验. 如果你从事编译器或解析器的开发工作,你可能对lex和yacc不会陌生,PLY是David Beazley实现的基于Python的lex和yacc.作者最著名的成就可能是其撰写的Python Cookbook, 3rd Edition.我因为偶然的原因接触了PLY,觉得是个好东西,但是似乎国内没有相关的资料.于是萌生了翻译的想法,虽然内容不算多,但是由于能力有限,很多概念不了解,还专门补习了编译原…
我对rabbitmq学习还不深入,这些翻译仅仅做资料保存,希望不要误导大家. There’s a dirty secret about creating queues and exchanges in Rabbit: by default they don’t survive reboot. That’s right; restart your RabbitMQ server and watch those queues and exchanges go poof (along with the…