Ocelot中使用Butterfly实践
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
查看Traces


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

如果Dependencies中把双箭头改成两个单箭头,加上求步骤序列编号就更清晰了。
《基于.net core微服务架构视频》
http://edu.51cto.com/course/13342.html
Ocelot中使用Butterfly实践的更多相关文章
- Ocelot中文文档-跟踪
Ocelot使用一个杰出的项目Butterfly 提供了跟踪功能. 为了使用跟踪,请阅读Butterfly的文档. 在Ocelot中如果你想跟踪一个ReRoute,你需要做如下事情: 在Configu ...
- 混合应用中的javascript实践
混合应用中的javascript实践 混合应用(hybird app) 在几年前便进入大众视野,近来更是越发风生水起,深受人民群众的喜爱. 目录 概念 什么是混合应用 混合方式 交互 方法注入 参数传 ...
- Ocelot中文文档-不支持
Ocelot不支持一下几点... 分块编码 - Ocelot将始终获取body大小并返回Content-Length头. 如果这不适合你的场景,只能表示抱歉! 转发host头 - 您发给Ocelot的 ...
- Ocelot中文文档-路由
Ocelot的主要功能是接管进入的http请求并把它们转发给下游服务.目前是以另一个http请求的形式(将来可能是任何传输机制). Ocelot将路由一个请求到另一个请求描述为ReRoute.为了在O ...
- Ocelot中文文档-管理
Ocelot支持在运行时通过一个认证的Http API修改配置.有两种方式对其验证, 使用Ocelot的内置IdentityServer(仅用于向管理API验证请求)或将管理API验证挂接到您自己的I ...
- Ocelot中文文档-Raft(实验功能不能用于生产环境)
Ocelot最近整合了Rafty,这是我在去年一直研究的Raft的一个实现. 这个项目实验性非常强,所以在我认为它没问题之前,请不要在生产环境中使用Ocelot的这个功能. Raft是一种分布式一致性 ...
- java多线程中最佳的实践方案是什么?
java多线程中最佳的实践方案是什么? 给你的线程起个有意义的名字.这样可以方便找bug或追踪.OrderProcessor, QuoteProcessor or TradeProcessor 这种名 ...
- Ocelot中文文档-Route
路由(Routing) Ocelot主要功能是接收即将发来的请求并转发它们至下游服务.与此同时,以另一个http请求的形式(在将来这可能是任何传输的机制) Ocelot将一个请求的路由描述为另一个路由 ...
- OpenStack环境中的NFV实践
原文链接:http://www.99cloud.net/html/2016/jiuzhouyuanchuang_1103/250.html 在开始实践之前我们首先需要了解一些NFV概念和术语. NFV ...
随机推荐
- vue中使用postMessage进行跨越传值
想在“当前位置”获取子页面的title属性,但是main页面和子页面在不同的端口上,直接获取会出现: “Blocked a frame with origin from accessing a cro ...
- TCP/IP详解 卷一学习笔记(转载)
https://blog.csdn.net/cpcpcp123/article/details/51259498
- tp5 mkdir(): Permission denied 问题
今天使用tp5 线上上传图片的时候遇到了一个问题 mkdir(): Permission denied 如图 百度了一下 发现大家都说 chmod -R 777 runtime 能解决问题 尝试了一下 ...
- codeforces contest1082
C 维护前缀和 题意 每一个id给一个权值序列,从每个id选出数量相同的权值,对他们进行求和,使得他们的和最大 题解 注意负数对结果没有贡献,直接跳过. 当时写的比较挫,连排序都写错了!cf的编译器比 ...
- [CSAcademy]Find the Tree
[CSAcademy]Find the Tree 题目大意: 交互题. 有一棵\(n(n\le2000)\)个结点的树,但是你并不知道树的形态.你可以调用\({\rm query}(x,y,z)\)( ...
- dubbo+zookeeper报错:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method可能的错误原因有三个前两个是从网上摘得, 第三个是自己解决的 1.需要进行 ...
- Pycharm安装+python安装+环境配置
Pycharm 工具: 1.安装jdk(64位):jdk-8u65-windows-x64.exe 路径:C:\Program Files\Java(默认路径) 2.配置环境 步骤一: 系统变量→新建 ...
- hadoop环境搭建及Wordcount案例实验
1.Linux环境变量设置 在/etc/profile中添加环境变量 sudo vim /etc/profile PATH=$PATH:/usr/local/hadoop/bin source /et ...
- C语言实型常量
实型常量又称实数或浮点数.在C语言中可以用两种形式来表示一个实型常量. 一.小数形式 小数形式的实型常量由两部分组成:数字和小数点.如:0.12.12...12都是合法的实型常量. 二.指数形式 在C ...
- anaconda安装opencv(python)
1.win10 win10没有安装python,只安装了anaconda,然后使用pip安装opencv-python,版本很新,opencv_python4.0.0的. 网速有点莫名其妙,时快时慢 ...