关于Apache camel 转发效率的测试
并发400 循环100次 总计40000条请求
1. 接口名称
基础服务的getToken接口
2. 源接口性能
平均响应时间817ms 平均TPS 462/s 服务正常率100%
证明源服务性能没有问题

3. 集成到服务总线性能
3.1 使用Hystraix做熔断
平均响应时间3791ms 平均TPS 50/s 服务正常率82%
性能严重
3.2 去掉熔断机制 保留所有业务处理器
平均响应时间1791ms 平均TPS 208/s 服务正常率100%
性能减半

3.3 去掉所有的处理器机制(直接from-to)
平均响应时间524ms 平均TPS 629.6/s 服务正常率
99.5%
性能正常

异常原因 org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool 。
推断是HTTPClient 连接池不够用。 修改camel的http组件参数
1. 最大连接数设为MaxTotalConnections :600 ,ConnectionsPerRoute 默认20 ;
没有效果
HttpComponent httpComponent = (HttpComponent) camelContext.getComponent("http4");
httpComponent.setMaxTotalConnections(600);
2. ConnectionsPerRoute 设置为 200 ;
异常率明显降低(0.4%)。
HttpComponent httpComponent = (HttpComponent) camelContext.getComponent("http4");
httpComponent.setMaxTotalConnections(600);
httpComponent.setConnectionsPerRoute(200);
3.继续增加单个路由的连接数配置到400, 测试通过
httpComponent.setConnectionsPerRoute(400);
- 原服务请求

- 通过camel转发

4.结论
经过以上测试可以得出结论,
1. Hystraix 对性能问题影响较大。
2. 中间的环节处理器,对性能影响较大。 推测是IO。
因为每次处理器都要将流转换为字符串进行处理,尝试合并多余的处理器,较少处理的IO。