Ocelot(https://github.com/TomPallister/Ocelot)是一个用.net core实现的API网关,Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core实现的全程序跟踪,现在,Ocelot中可以使用Butterfly了,关于Ocelot和Butterfly具体功能参见各自的github站点,关于Ocelot和Butterfly组合实现,参数张善友博客http://www.csharpkit.com/2018-02-04_51207.html,本篇博客讲述一个案例的实现。

博客中代码参见https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/OcelotAndButterfly,可只下载下面的项目进行测试。

项目说明表:

项目名称

项目类型

端口

说明

OcelotGateway

web api

5000

网关项目

API001

web api

5001

业务api项目

API002

web api

5002

业务api项目

TestAPI

web api

5577

测试api项目

Ocelot

类库

Ocelot官方源码,因为有个bug,以进行pr,所以现在把clone下载来作了个修复,后续官方会修正。

Butterfly-web-preview-0.0.8

Web api

9618

Butterrfly执行程序,用来收集经过节点的数据,并作展示,可以过来http://localhost:9618来访问

项目结构:

API001和API002本身代码非常简单,就是请求后返回一个带时间的字符串,API001在返回前,会调用API002,因为有网关存在,所以在API001的实现方法是请求网关中的API002映射路径的(详见项目代码),而不是直接访问API002(因为在微服务集群中,API002应该有多个节点,这些节点通过服务注册后才知道具体地址,所以在调用的时候,通过访问网关的地址来达到访问API002。

TestAPI中请求的是网关中的API001的映射(详见项目代码)

OcelotGateway中配置文件configuration.json中,开启各ReRoutes中的HttpHandlerOptions下的UseTracing:true即可(详见项目代码)

需要引用butterfly.Client.AspNetCore项目有:API001,API002,OcelotGateway,TestAPI,现在butterfly.Client.AspNetCore版本是0.0.8,有bug(与作者联系后期版本会修正),可以引用0.0.7进行测试。

请求的路径如下图:

请求从TestAPI的URL:http://localhost:5577/api/values/1开始,TestAPI利用HttpClient请求网关URL:http://localhost:5000/api001/values,网关中会利用HttpClient转配置中映射URL:http://localhost:5001/api/values,API001会利用HttpClient请求URL:http://localhost:5000/api002/values,网关中会利用HttpClient转配置中映射URL:http://localhost:5002/api/values

需要启动项目:

1、 用dotnet Butterfly.Web.dll --EnableHttpCollector=true启动Butterfly-web-preview-0.0.8

2、 启动OcelotGateway

3、 启动API001

4、 启动API002

打开http://localhost:9618

查看Traces

可以通过Traces第二张图请求的上下级序顺可以看到与我们上面分析的请求路径一致。

查看Dependencies

如果Dependencies中把双箭头改成两个单箭头,加上求步骤序列编号就更清晰了。

《基于.net core微服务架构视频》

 http://edu.51cto.com/course/13342.html

Ocelot中使用Butterfly实践的更多相关文章

  1. Ocelot中文文档-跟踪

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

  2. 混合应用中的javascript实践

    混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...

  3. Ocelot中文文档-不支持

    Ocelot不支持一下几点... 分块编码 - Ocelot将始终获取body大小并返回Content-Length头. 如果这不适合你的场景,只能表示抱歉! 转发host头 - 您发给Ocelot的 ...

  4. Ocelot中文文档-路由

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

  5. Ocelot中文文档-管理

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

  6. Ocelot中文文档-Raft(实验功能不能用于生产环境)

    Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...

  7. java多线程中最佳的实践方案是什么?

    java多线程中最佳的实践方案是什么? 给你的线程起个有意义的名字.这样可以方便找bug或追踪.OrderProcessor, QuoteProcessor or TradeProcessor 这种名 ...

  8. Ocelot中文文档-Route

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

  9. OpenStack环境中的NFV实践

    原文链接:http://www.99cloud.net/html/2016/jiuzhouyuanchuang_1103/250.html 在开始实践之前我们首先需要了解一些NFV概念和术语. NFV ...

随机推荐

  1. 恢复数据库的redo日志文件(由于异常关机引起)

    需要事先进入sqlplus select * from v$log 打印相关文件信息 1.recover database until cancel(recover database using ba ...

  2. Jmeter中主要管理器功用

    不管是在使用jmeter进行性能测试还是接口自动化测试时经常用到各种管理器进行对参数的处理,但是有时候分不清几种管理器的具体用法,所以做个笔记,列一下吧(所列内容基于版本为3.2) 主要内容包含以下: ...

  3. unity runtime时导入fbx文件

    TriLib is a Unity model loader package designed to allow the user to load various 3D model formats i ...

  4. 单个 js 文件禁用 ESLint 语法校验

    在代码顶部添加一行注释 /* eslint-disable */ ESLint 在校验的时候就会跳过后面的代码 还可以在注释后加入详细规则,这样就能避开指定的校验规则了 /* eslint-disab ...

  5. tensorflow 使用 2 Felch ,Feed

    Felch ::在会话里可以执行多个 op , import tensorflow as tf input1 = tf.constant(3.0) input2 = tf.constant(2.0) ...

  6. C++第二课:指针常用法[个人见解]

    在小编这里,没有任何学习知识的顺序,写到的东西对初学者肯定是有用处的,前提,你真的把C语言学完的那些初学者. 在讲明指针的知识前,或许有人一直说不会指针你学不会C++,或者说你所学C++的深度,全凭你 ...

  7. Windows环境下,本地Oracle创建dblink连接远程mysql

    前言 我的情况是,本地安装了oracle(安装完成后带有SQL Developer,不需要再安装instantclient),创建dblink去连接远程的mysql.有些朋友可能是 本地使用PL\SQ ...

  8. 微信JS SDK接入的几点注意事项

    微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...

  9. VMware手动添加centos7硬盘图文操作及分区超详细

    先设置虚拟机 启动的虚拟机,新关机再设置 1.选择指定虚拟机,点击硬盘 2.虚拟机设置,点击左下角“添加” 3.硬件类型选择硬盘,点击下一步 4.添加硬件向导默认就行,下一步 5.选择磁盘,默认选中, ...

  10. php获取当前时间的毫秒数

    floor(microtime()*1000); 用microtime能输出当前的秒的后面8位小数 乘以1000取整数就行了