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中把双箭头改成两个单箭头,加上求步骤序列编号就更清晰了。
推荐阅读
-
03 .NET CORE 2.2 使用OCELOT -- Docker中的Consul
-
2012中国云计算最佳使用实践巡展武汉光博会展 罗文致辞
-
AngularJS实践之使用ng-repeat中$index的注意点
-
Ocelot中使用Butterfly实践
-
HTML5实践-在非响应式设计中如何使用ViewPort meta标签的方法介绍
-
03 .NET CORE 2.2 使用OCELOT -- Docker中的Consul
-
编码最佳实践(2)--推荐使用concurrent包中的Atomic类 编码最佳实践Atomic
-
编码最佳实践(2)--推荐使用concurrent包中的Atomic类 编码最佳实践Atomic
-
sklearn中datasets的使用与实践
-
机器学习算法与Python实践(12) - sklearn中的 PCA 的使用