第 85 章 Disruptor 组件
从 Camel 版本 2.12 开始提供
中断 器: 组件提供异步 SEDA 行为,与标准的 SEDA 组件一样,但使用了 Disruptor 而不是由标准 SEDA 使用的 BlockingQueue。或者,
disruptor-vm : 此组件支持端点,提供标准 虚拟机 的替代方案。与 SEDA 组件一样,disruptor: 端点的缓冲仅在 单一 CamelContext 中看到,不支持持久性或恢复。disruptor-vm: 端点的缓冲也支持在 CamelContexts 实例间的通信,因此您可以使用此机制在系统/引导类路径上进行通信(因为 camel-disruptor.jar 位于 system/boot 类路径上)。
选择在 SEDA 中使用 Disruptor 组件的主要优点是,在用例中,生产者和/或多播或并发消费者之间有较高的竞争。在这些情况下,观察到的吞吐量并减少了延迟。没有竞争的情况下的性能与 SEDA 和虚拟机组件相当。
Disruptor 是为了尽可能模拟 SEDA 和 VM 组件的行为和选项。它们的主要区别如下:
- 使用的缓冲区的大小始终以 1024 个交换的形式进行绑定。
- 当缓冲区始终被禁止时,Disruptor 的默认行为是阻止,而缓冲区已满而不是抛出异常。此默认行为可以在组件上配置(请参阅选项)。
- Disruptor enpoints 不实现 BrowsableEndpoint 接口。因此,当前在 Disruptor 中的交换无法检索,只有交换量。
- Disruptor 要求其消费者(多播或其他形式)被静态配置。即时添加或删除消费者需要完全刷新 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>
85.1. URI 格式
disruptor:someName[?options]
或
disruptor-vm:someName[?options]
其中 someName 可以是在当前 CamelContext 中唯一标识端点的任何字符串(如果
disruptor-vm:)。
您可以使用以下格式将查询选项附加到 URI 中:
?option=value&option=value&…