63.11. 重复使用端点并发送到在运行时计算的不同目的地


如果您需要发送消息到大量不同的 RabbitMQ 交换,您必须重复使用端点并在消息标头中指定实际目的地。这允许 Camel 重复使用同一端点,但发送到不同的交换。这可显著减少内存和线程资源上创建的端点数量。

使用 toD 比使用标头指定动态目的地更容易

您可以使用以下标头指定:

Expand
标头类型描述

CamelSpringRabbitmqExchangeOverrideName

字符串

交换名称。

CamelSpringRabbitmqRoutingOverrideKey

字符串

路由密钥。

例如,以下路由演示了如何在运行时计算目的地,并使用它来覆盖端点 URL 中出现的交换:

from("file://inbox")
  .to("bean:computeDestination")
  .to("spring-rabbitmq:dummy");
Copy to Clipboard Toggle word wrap

交换名称 dummy 只是一个占位符。它必须作为 RabbitMQ 端点 URL 的一部分提供,但在本示例中会忽略它。

computeDestination bean 中,通过设置 CamelRabbitmqExchangeOverrideName 标头来指定实际目的地,如下所示:

public void setExchangeHeader(Exchange exchange) {
   String region = ....
   exchange.getIn().setHeader("CamelSpringRabbitmqExchangeOverrideName", "order-" + region);
}
Copy to Clipboard Toggle word wrap

Camel 读取此标头,并将其用作交换名称,而不是端点上配置的名称。因此,在这个示例中,Camel 将消息发送到 spring-rabbitmq:order-emea,假设 region 值为 emea

生产者同时从 交换中删除 CamelSpringRabbitmqNameCamelSpringRabbitmqRoutingOverrideKey 标头,且不会将它们传播到创建的 Rabbitmq 消息,以避免路由中的意外循环(当消息转发到另一个 RabbitMQ 端点时)。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat