2.16. JMX 命名
概述
通过为它定义管理名称,Apache Camel 允许您自定义 CamelContext
的名称 (其出现在 JMX 中)。例如,您可以自定义 XML CamelContext
实例的名称模式,如下所示:
<camelContext id="myCamel" managementNamePattern="#name#">
...
</camelContext>
如果您没有明确为 CamelContext
an 设置名称模式,Apache Camel 将恢复为默认的命名策略。
默认命名策略
默认情况下,在 OSGi 捆绑包中部署的 CamelContext
名称等于该捆绑包的 OSGi 符号链接名称。例如,如果 OSGi 符号链接名称为 MyCamelBundle
,则 JMX 名称是 MyCamelBundle
。如果捆绑包中有多个 CamelContext
,则将计数器值添加为后缀,则 JMX 名称不会被混淆。例如,如果 MyCamelBundle
捆绑包中有多个 Camel 上下文,则对应的 JMX MBeans 命名如下:
MyCamelBundle-1 MyCamelBundle-2 MyCamelBundle-3 ...
自定义 JMX 命名策略
默认命名策略的一个缺陷是,您不能保证给定 CamelContext
an 在运行之间具有相同的 JMX 名称。如果您想在不同运行之间具有更高的一致性,您可以通过为 CamelContext
实例定义 JMX name 模式,以更精确地控制 JMX 名称。
在 Java 中指定名称模式
要在 Java 中为 CamelContext
指定名称模式,请调用 setNamePattern
方法,如下所示:
// Java context.getManagementNameStrategy().setNamePattern("#name#");
在 XML 中指定名称模式
要在 XML 中为 CamelContext
指定名称模式,请在 camelContext
元素上设置 managementNamePattern
属性,如下所示:
<camelContext id="myCamel" managementNamePattern="#name#">
名称模式令牌
您可以通过将字面文本和以下令牌的任意令牌组合来构建 JMX 名称模式:
令牌 | 描述 |
---|---|
|
|
|
与 |
|
递增计数器(从 |
| OSGi 部署捆绑包的 ID (仅限 OSGi) |
| OSGi 符号链接名称 (仅限 OSGi) |
| OSGi 捆绑版本 (仅限 OSGi) |
例子
以下是您可以使用支持的令牌定义的 JMX 名称模式的一些示例:
<camelContext id="fooContext" managementNamePattern="FooApplication-#name#"> ... </camelContext> <camelContext id="myCamel" managementNamePattern="#bundleID#-#symbolicName#-#name#"> ... </camelContext>
模糊名称
由于自定义命名模式会覆盖默认的命名策略,因此可以使用此方法定义模糊的 JMX MBean 名称。例如:
<camelContext id="foo" managementNamePattern="SameOldSameOld"> ... </camelContext> ... <camelContext id="bar" managementNamePattern="SameOldSameOld"> ... </camelContext>
在这种情况下,Apache Camel 将在启动时失败,并报告 MBean 已经存在 异常。因此,您应该要格外小心,确保您没有定义模糊的名称模式。