2.16. JMX 命名
概述
Apache Camel 允许您通过定义 管理名称模式 来自定义 JMX 中显示的 CamelContext
bean 的名称。例如,您可以自定义 XML CamelContext
实例的名称模式,如下所示:
<camelContext id="myCamel" managementNamePattern="#name#">
...
</camelContext>
如果您没有为 CamelContext
bean 明确设置名称模式,Apache Camel 会恢复到默认的命名策略。
默认命名策略
默认情况下,在 OSGi 捆绑包中部署的 CamelContext
bean 的 JMX 名称等同于捆绑包中的 OSGi 符号链接名称。例如,如果 OSGi 符号链接名称为 MyCamelBundle
,JMX 名称是 MyCamelBundle
。如果捆绑包中有多个 CamelContext
,则 JMX 名称通过将计数器值添加为后缀来撤销。例如,如果 MyCamelBundle
捆绑包中有多个 Camel 上下文,则对应的 JMX MBeans 被命名如下:
MyCamelBundle-1 MyCamelBundle-2 MyCamelBundle-3 ...
自定义 JMX 命名策略
默认命名策略的一个缺点是,您无法保证给定 CamelContext
Bean 在运行之间具有相同的 JMX 名称。如果要在运行之间具有更大的一致性,您可以通过为 CamelContext
实例定义 JMX 名称 模式来更精确地控制 JMX 名称。
在 Java 中指定名称模式
要在 Java 中的 CamelContext
上指定名称模式,请调用 setNamePattern
方法,如下所示:
// Java context.getManagementNameStrategy().setNamePattern("#name#");
在 XML 中指定名称模式
要在 XML 中的 CamelContext
上指定名称模式,请在 camelContext
元素上设置 managementNamePattern
属性,如下所示:
<camelContext id="myCamel" managementNamePattern="#name#">
名称模式令牌
您可以通过将字面文本与以下令牌之一混合来构建 JMX 名称模式:
令牌 | 描述 |
---|---|
|
|
|
与 |
|
递增计数器(从 |
| 已部署捆绑包( 仅限OSGi)的 OSGi 捆绑包 ID。 |
| 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 已存在 异常。因此,您应该格外小心,以确保您没有定义模糊的名称模式。