第 84 章 Disruptor 组件
作为 Camel 2.12 版本提供
中断者: 组件提供异步 SEDA 行为和标准 SEDA 组件,但利用一个 Disruptor 而不是由标准 SEDA 使用的 BlockingQueue。或者,
breakor-vm: 此组件支持端点,为标准 虚拟机 提供替代功能。与 SEDA 组件一样,破坏者的缓冲: 端点仅在 单个 CamelContext 中可见,不提供支持持久性或恢复。disruption or-vm: 端点的 缓冲区还支持 CamelContexts 实例间的通信,因此您可以使用此机制在 web 应用程序间通信(提供 camel-disruptor.jar 是在 系统/引导 类路径上)。
选择在 SEDA 或 VM 组件上使用 Disruptor 组件的主要优点在发生在生产者和/或多播化或并发消费者之间具有高竞争的情况。在这样的情形中,观察到了延迟的显著增加和缩短时间。在没有争用情形的情况下性能与 SEDA 和 VM 组件相当。
Disruptor 通过尽可能多地对 SEDA 和虚拟机组件的行为和选项实施。它们的主要区别如下:
- 使用的缓冲区总是以大小(默认 1024 交换)绑定。
- 由于缓冲区始终被取整,所以 Disruptor 的默认行为是阻止,而缓冲区已满,而不是抛出异常。此默认行为可以在组件上配置(请参阅选项)。
- Disruptor enpoints 没有实施 BrowsableEndpoint 接口。因此,目前在 Disruptor 中的交换无法被检索,只有交换量才会被检索。
- 分销商要求以静态方式配置其消费者(多播或其他)。即时添加或删除消费者需要完全清空 Disruptor 中所有待处理的交换。
- 因此,重新配置:通过经销商发送的数据将直接处理,如果至少有一个消费者是消费者,则相关加入者只能在其加入后获得新交换。
- Disruptor 组件不支持 pollTimeout 选项。
- 当制作者在全 Disruptor 上阻止时,它不会响应线程中断。
Maven 用户需要将以下依赖项添加到其 pom.xml
中:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-disruptor</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
84.1. URI 格式
disruptor:someName[?options]
或者
disruptor-vm:someName[?options]
其中 someName 可以是当前 CamelContext 中唯一标识端点的任何字符串(如果是
中断或-vm:),则可在上下文中标识。
您可以按照以下格式将查询选项附加到 URI:
?option=value&option=value&…