2.12. JMX Naming

    xiaoxiao2021-03-25  45

    Overview

    Apache Camel allows you to customise the name of a CamelContext bean as it appears in JMX, by defining a management name pattern for it. For example, you can customise the name pattern of an XML CamelContext instance, as follows:

    <camelContext id="myCamel" managementNamePattern="#name#"> ... </camelContext>

    If you do not explicitly set a name pattern for the CamelContext bean, Apache Camel reverts to a default naming strategy.

    Default naming strategy

    By default, the JMX name of a CamelContext bean is equal to the value of the bean’s id attribute, prefixed by the current bundle ID. For example, if the id attribute on a camelContext element is myCamel and the current bundle ID is 250, the JMX name would be 250-myCamel. In cases where there is more than one CamelContext instance with the same id in the bundle, the JMX name is disambiguated by adding a counter value as a suffix. For example, if there are multiple instances of myCamel in the bundle, the corresponding JMX MBeans are named as follows:

    250-myCamel-1 250-myCamel-2 250-myCamel-3 ...

    Customising the JMX naming strategy

    One drawback of the default naming strategy is that you cannot guarantee that a given CamelContext bean will have the same JMX name between runs. If you want to have greater consistency between runs, you can control the JMX name more precisely by defining a JMX name pattern for the CamelContext instances.

    Specifying a name pattern in Java

    To specify a name pattern on a CamelContext in Java, call the setNamePattern method, as follows:

    ​// Java ​context.getManagementNameStrategy().setNamePattern("#name#");

    Specifying a name pattern in XML

    To specify a name pattern on a CamelContext in XML, set the managementNamePattern attribute on the camelContext element, as follows:

    <camelContext id="myCamel" managementNamePattern="#name#">

    Name pattern tokens

    You can construct a JMX name pattern by mixing literal text with any of the following tokens:

    Table 2.11. JMX Name Pattern Tokens 

    Examples

    Here are some examples of JMX name patterns you could define using the supported tokens:

    <camelContext id="fooContext" managementNamePattern="FooApplication-#name#"> ... </camelContext> <camelContext id="myCamel" managementNamePattern="#bundleID#-#symbolicName#-#name#"> ... </camelContext>

    Ambiguous names

    Because the customised naming pattern overrides the default naming strategy, it is possible to define ambiguous JMX MBean names using this approach. For example:

    <camelContext id="foo" managementNamePattern="SameOldSameOld"> ... </camelContext> ... <camelContext id="bar" managementNamePattern="SameOldSameOld"> ... </camelContext>

    In this case, Apache Camel would fail on start-up and report an MBean already exists exception. You should, therefore, take extra care to ensure that you do not define ambiguous name patterns.

    转载请注明原文地址: https://ju.6miu.com/read-35110.html

    最新回复(0)