Ocelot支持一个客户端以头的形式发送requestid。 如果设置了,一旦中间件管道中可用,Ocelot便会使用这个requestid进行日志记录。 Ocelot也会使用指定头将requireid转发给下游服务。

如果在日志配置中你设置IncludeScopes为true,你还可以在日志中获取asp.net core的请求id。

为了是用requestid,有两种选择。

全局

在ocelot.json的GlobalConfiguration配置块中如下设置。这样所有进入Ocelot的请求都会起作用。

  1. "GlobalConfiguration": {
  2. "RequestIdKey": "OcRequestId"
  3. }

我建议使用GlobalConfiguration,除非你真的需要它是指定ReRoute的。

ReRoute

如果你想覆盖全局设置,在ocelot.json的特定ReRoute中添加如下设置。

  1. "RequestIdKey": "OcRequestId"

一旦Ocelot识别出与ReRoute对象匹配的请求,它将根据ReRoute的配置来设置requestid。

这可能会导致一下困惑。如果你在GlobalConfiguration中设置了requestid,可能在ReRoute被匹配前是一个,匹配后是另一个,因为requestid的key会变。这是因为设计如此,而且这是我目前能想到的最好的解决方案了。在这种情况下OcelotLogger会在日志中记录当前requestid和上一个requestid。

下面的例子是debug级别下一个正常请求的日志记录。

  1. dbug: Ocelot.Errors.Middleware.ExceptionHandlerMiddleware[0]
  2. requestId: asdf, previousRequestId: no previous request id, message: ocelot pipeline started,
  3. dbug: Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware[0]
  4. requestId: asdf, previousRequestId: no previous request id, message: upstream url path is {upstreamUrlPath},
  5. dbug: Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware[0]
  6. requestId: asdf, previousRequestId: no previous request id, message: downstream template is {downstreamRoute.Data.ReRoute.DownstreamPath},
  7. dbug: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
  8. requestId: asdf, previousRequestId: no previous request id, message: EndpointRateLimiting is not enabled for Ocelot.Values.PathTemplate,
  9. dbug: Ocelot.Authorisation.Middleware.AuthorisationMiddleware[0]
  10. requestId: 1234, previousRequestId: asdf, message: /posts/{postId} route does not require user to be authorised,
  11. dbug: Ocelot.DownstreamUrlCreator.Middleware.DownstreamUrlCreatorMiddleware[0]
  12. requestId: 1234, previousRequestId: asdf, message: downstream url is {downstreamUrl.Data.Value},
  13. dbug: Ocelot.Request.Middleware.HttpRequestBuilderMiddleware[0]
  14. requestId: 1234, previousRequestId: asdf, message: setting upstream request,
  15. dbug: Ocelot.Requester.Middleware.HttpRequesterMiddleware[0]
  16. requestId: 1234, previousRequestId: asdf, message: setting http response message,
  17. dbug: Ocelot.Responder.Middleware.ResponderMiddleware[0]
  18. requestId: 1234, previousRequestId: asdf, message: no pipeline errors, setting and returning completed response,
  19. dbug: Ocelot.Errors.Middleware.ExceptionHandlerMiddleware[0]
  20. requestId: 1234, previousRequestId: asdf, message: ocelot pipeline finished,

Ocelot中文文档-请求Id和关联Id的更多相关文章

  1. Ocelot中文文档-请求聚合

    Ocelot允许您指定聚合多个普通ReRoutes的Aggregate ReRoutes(聚合路由),并将其响应映射到一个对象中.一般用于当您有一个客户端向服务器发出多个请求,而这些请求可以合并成一个 ...

  2. Ocelot中文文档-Route

    路由(Routing) Ocelot主要功能是接收即将发来的请求并转发它们至下游服务.与此同时,以另一个http请求的形式(在将来这可能是任何传输的机制) Ocelot将一个请求的路由描述为另一个路由 ...

  3. Ocelot中文文档入门

    入门 Ocelot仅适用于.NET Core,目前是根据netstandard2.0构建的,如果Ocelot适合您,这个文档可能会有用. .NET Core 2.1 安装NuGet包 使用nuget安 ...

  4. Ocelot中文文档-流量控制

    感谢@catcherwong 的文章激励我最终写出了这个文档 Ocelot支持上游的请求限制,以便您的下游服务不会过载. 此功能是由GitHub上的@geffzhang添加! 非常感谢. 好了,为了让 ...

  5. Ocelot中文文档-转换Headers

    Ocelot允许在请求下游服务之前和之后转换头部.目前Ocelot只支持查找和替换.这个功能在Github #190提出.我确定这个功能可以在各个方面发挥作用. 添加到请求 这个功能在GitHub # ...

  6. .NET Core开源API网关 – Ocelot中文文档

    Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...

  7. Ocelot中文文档-路由

    Ocelot的主要功能是接管进入的http请求并把它们转发给下游服务.目前是以另一个http请求的形式(将来可能是任何传输机制). Ocelot将路由一个请求到另一个请求描述为ReRoute.为了在O ...

  8. Ocelot中文文档-管理

    Ocelot支持在运行时通过一个认证的Http API修改配置.有两种方式对其验证, 使用Ocelot的内置IdentityServer(仅用于向管理API验证请求)或将管理API验证挂接到您自己的I ...

  9. Ocelot中文文档-跟踪

    Ocelot使用一个杰出的项目Butterfly 提供了跟踪功能. 为了使用跟踪,请阅读Butterfly的文档. 在Ocelot中如果你想跟踪一个ReRoute,你需要做如下事情: 在Configu ...

随机推荐

  1. Unity UGUI基础之Slider、Scrollbar

    Slider(滑动条):是一个主要用于形象的拖动以改变目标值的控件,他的最恰当应用是用来改变一个数值,最大值和最小值自定义,拖动滑块可在此之间改变,例如改变声音大小. Scrollbar(滚动条):是 ...

  2. SharePoint 2013: The "New Web Application" button is disabled is the central administration

    安装完sharepoint foundation2013后,直接通过url访问管理中心,想进application management去新建的话会发现新建按钮是灰色的,即使你用的是系统管理员账号并且 ...

  3. Chapter 2 User Authentication, Authorization, and Security(8):创建映射到登录名的数据库用户

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38944121,专题目录:http://blog.csdn.net/dba_huangzj ...

  4. Oracle Instance

    以前也学习过oracle 逻辑结构的知识,但用的不多好多都是有点概念,最近做到一个跨instance工作流,所有抽点时间温习了一下相关知识,把网上看到的感觉讲的还比较明了,全面的文章汇总一下 inst ...

  5. Let the Balloon Rise HDU 1004

    Let the Balloon Rise Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other ...

  6. 详解ebs接口之客户配置文件导入(二)

    ------------------------------------ -- 1a. Setup the Org_id ------------------------------------ ex ...

  7. Rust语言

    Rust语言 https://doc.rust-lang.org/stable/book/ http://www.phperz.com/article/15/0717/141560.html Rust ...

  8. 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)

    原文:http://blog.csdn.net/sk719887916/article/details/44781475 skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家 ...

  9. Salesforce 官方扫盲自学导航

    Force.com Platform Fundamentals(新手入门的葵花宝典)www.salesforce.com/us/developer/docs/fundamentals/index_Le ...

  10. Android 开发中遇到Read-only file system问题解决方案

    问题描述: 在往scdcard中复制mp3文件时,复制不成功.查看了一下sdcard里面没有内容,且无法直接在里面创建文件会出现--    read only file system类似的内容提示. ...