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


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

您可以在以下标头中指定目的地:

Expand
标头类型描述

CamelJmsDestination

javax.jms.Destination

目标对象。

CamelJmsDestinationName

字符串

目标名称。

例如,以下路由演示了如何在运行时计算目的地,并使用它来覆盖 JMS URL 中显示的目的地:

from("file://inbox")
  .to("bean:computeDestination")
  .to("activemq:queue:dummy");
Copy to Clipboard Toggle word wrap

队列名称 dummy 只是一个占位符。它必须作为 JMS 端点 URL 的一部分提供,但本例中将被忽略。

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

public void setJmsHeader(Exchange exchange) {
   String id = ....
   exchange.getIn().setHeader("CamelJmsDestinationName", "order:" + id");
}
Copy to Clipboard Toggle word wrap

然后 Camel 将读取此标头并将其用作目的地,而不是在端点上配置的标头。因此,在这个示例中,Camel 将消息发送到 activemq:queue:order:2,假设 id 值为 2。

如果同时设置了 CamelJmsDestinationCamelJmsDestinationName 标头,则 CamelJmsDestination 具有优先权。请记住,JMS 生成者会从交换中删除 CamelJmsDestination and CamelJmsDestinationName 标头,且不会将它们传播到所创建的 JMS 消息,以避免路由中的意外循环(当消息将转发到另一个 JMS 端点时)。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat