我正在使用 Apache camel 来实现调度程序 EIP。队列中有数千条消息需要通过不同的 URL 传递。每条消息都有自己的传递 URL 和传递协议(ftp、电子邮件、http 等)。
它的实现方式:
- 引导一个单一的骆驼上下文,为 JMX 禁用上下文,并且在 ManagementStrategy 上将 loadStatisticsEnabled 设置为 false。如 jira 问题中所述,在 2.11.0 版本中解决,用于禁用后台管理线程创建。
- 对于正在构建的每条消息,都会将消息推送到路由以进行传递。
- 处理完消息后,路由将关闭并从上下文中删除。
通过有 200 个调度程序组件线程进行了小型性能测试,每个线程共享相同的上下文。观察到启动路由的时间最多增加到 60 秒,而处理时间以毫秒为单位。
问题 CAMEL-5675 提到此问题已得到修复,但仍观察到启动路线需要大量时间。 https://issues.apache.org/jira/browse/CAMEL-5675
正在为 http 创建的路由是
from("direct:"+dispatchItem.getID())
.toF("%s?httpClient.soTimeout=%s&disableStreamCache=true", dispatchItem.getEndPointURL(),timeOutInMillis);
每个 dispatchItem 都有一个唯一的 ID。