搜索

第 85 章 Disruptor 组件

download PDF

从 Camel 版本 2.12 开始提供

disruptor: 组件提供异步 SEDA 行为,但使用 Disruptor 而不是标准 SEDA 使用的 BlockingQueue。或者,a

disruptor-vm: 此组件支持端点,提供标准 虚拟机 的替代选择。与 SEDA 组件一样,破坏者的缓冲区 端点仅在 单个 CamelContext 中可见,不提供对持久性或恢复的支持。disruptor-vm: 端点的缓冲区也支持 CamelContexts 实例之间的通信,因此您可以使用此机制在 Web 应用之间进行通信(提供 camel-disruptor.jar 在系统/启动 类路径上)。

选择在生成者和/或多播或并发消费者之间有高竞争时,使用 SEDA 或 VM 组件相比,使用 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]

or

 disruptor-vm:someName[?options]

其中 someName 可以是在当前 CamelContext 中唯一标识端点的任何字符串(如果
disruptor-vm:),则跨上下文。
您可以使用以下格式将查询选项附加到 URI 中:

  ?option=value&option=value&…
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.