180.6.4. 管理命名模式


可从 Camel 2.10 开始

Camel 2.10 开始,我们更加容易地为 MBeans 配置命名模式。该模式作为 ObjectName 的一部分被用作域名后的键。

默认情况下,CamelContextMBean 将 MBean 名称用于 ManagedCamelContextMBean,如下所示:

org.apache.camel:context=localhost/camel-1,type=context,name=camel-1
Copy to Clipboard Toggle word wrap

Camel 2.13 开始主机名不包括在 MBean 名称中,因此上述示例如下:

org.apache.camel:context=camel-1,type=context,name=camel-1
Copy to Clipboard Toggle word wrap

如果您在 CamelContext 上配置名称,则该名称也是 ObjectName 的一部分。例如,如果我们有

<camelContext id="myCamel" ...>
Copy to Clipboard Toggle word wrap

然后 MBean 名称将如下:

org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
Copy to Clipboard Toggle word wrap

现在,如果 JVM 中有一个命名 clash (例如,已存在上述给定名称的 MBean),那么 Camel 默认会尝试通过使用计数器在 JMXMBeanServer 中查找新的可用名称来自动纠正此操作。如上所示,现在附加计数器,因此我们将 myCamel-1 作为 ObjectName 的一部分:

org.apache.camel:context=localhost/myCamel-1,type=context,name=myCamel
Copy to Clipboard Toggle word wrap

这是因为 Camel 默认使用命名模式来支持以下令牌:

  • camelId = CamelContext id (如名称)
  • name - 与 camelId相同
  • counter - 递增计数器 * bundleId - OSGi 捆绑包 ID (仅适用于 OSGi 环境)
  • 符号名称 - OSGi 符号链接名称(仅适用于 OSGi 环境)
  • 版本 - OSGi 捆绑版本(仅适用于 OSGi 环境)

默认命名模式在 OSGi 和非OSGi 不同,如下所示:

  • non OSGI: name
  • OSGi: bundleId-name
  • OSGi Camel 2.13: 符号名称

但是,如果在 JMXMBeanServer 中有一个命名 clash,Camel 将自动回退,并在 模式中使用计数器 来补救此问题。因此将使用以下模式:

  • non OSGI: name-counter
  • OSGi: bundleId-name-counter
  • OSGi Camel 2.13: 符号名称-计数器

如果您设置了显式命名模式,那么始终使用该模式,并且不 使用上述默认模式。

这样,我们可以在 JMXMBeanRegistry 中对 CamelContext id 命名以及 JMXMBeans 的命名变得非常容易。

从 Camel 2.15 开始,您可以使用 JVM 系统属性配置默认管理名称模式,为 JVM 配置这一全局配置。请注意,您可以通过显式配置此模式来覆盖它,如下例所示。

设置 JVM 系统属性,以使用 cool 为名称加上前缀的默认管理名称模式。

System.setProperty(JmxSystemPropertyKeys.MANAGEMENT_NAME_PATTERN, "cool-#name#");
Copy to Clipboard Toggle word wrap

因此,如果我们希望明确命名 CamelContext 并使用固定的 MBean 名称,该名称不会更改(例如,没有计数器),那么我们可以使用新的 managementNamePattern 属性:

<camelContext id="myCamel" managementNamePattern="#name#">
Copy to Clipboard Toggle word wrap

然后 MBean 名称始终如下所示:

org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
Copy to Clipboard Toggle word wrap

在 Java 中,您可以配置 managementNamePattern,如下所示:

context.getManagementNameStrategy().setNamePattern("#name#");
Copy to Clipboard Toggle word wrap

您还可以使用与 id 的 managementNamePattern 中的不同名称,例如我们可以:

<camelContext id="myCamel" managementNamePattern="coolCamel">
Copy to Clipboard Toggle word wrap

如果您不希望 OSGi 捆绑包 ID 作为 MBean 名称的一部分,您可能希望在 OSGi 环境中执行此操作。由于 OSGi 捆绑包 id 可更改服务器,或者卸载并安装相同的应用程序。然后您可以按如下所示不要使用 OSGi 捆绑包 ID 作为名称的一部分:

<camelContext id="myCamel" managementNamePattern="#name#">
Copy to Clipboard Toggle word wrap

请注意,这需要 myCamel 在整个 JVM 中是唯一的。如果安装了具有相同 CamelContext id 和 managementNamePattern 的 2nd Camel 应用程序,那么 Camel 将在启动时失败,并报告 MBean 已存在的异常。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat