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


如果您需要发送消息到许多不同的 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 制作者会从交换中删除 CamelJmsDestinationCamelJmsDestinationName 标头,并且不将它们传播到创建的 JMS 消息,以避免在路由中出现意外循环(在消息将转发到另一个 JMS 端点时的情况)。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat