2.16. JMX 命名
概述
Apache Camel 允许您通过为其定义 管理名称模式 来自定义 CamelContext
bean 的名称,因为它出现在 JMX 中。例如,您可以自定义 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 捆绑包 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 已存在 异常。因此,您应该额外注意确保您没有定义模糊的名称模式。