Hazelcast MBean отсутствует - PullRequest
0 голосов
/ 29 мая 2018

Я перенес приложение в Spring Boot, включая миграцию из XML в конфигурацию Java.Приложение использует Hazelcast, и это работает.Тем не менее, я больше не вижу Hazelcast MBean в JConsole.Единственное, что мне удалось найти относительно включения JMX, это свойство

properties.put("hazelcast.jmx", true);

Но это не помогает.Это конфигурация до миграции:

<hz:hazelcast id="hzInstance">
    <hz:config>
        <hz:group name="gsynth" password="gsynth"/>
        <hz:properties>
            <hz:property name="hazelcast.logging.type">slf4j</hz:property>
            <hz:property name="hazelcast.jmx">true</hz:property>
            <hz:property name="hazelcast.version.check.enabled">false</hz:property>
            <hz:property name="hazelcast.icmp.enabled">true</hz:property>
            <hz:property name="hazelcast.shutdownhook.enabled">true</hz:property>
            <hz:property name="hazelcast.max.operation.timeout">60000</hz:property>
            <hz:property name="hazelcast.restart.on.max.idle">true</hz:property>
        </hz:properties>
        <hz:network port="5701" port-auto-increment="false">
            <hz:join>
                <hz:multicast enabled="false"/>
                <hz:tcp-ip enabled="true">
                    <hz:members>${members.list}</hz:members>
                </hz:tcp-ip>
            </hz:join>
        </hz:network>
    </hz:config>
</hz:hazelcast>
<hz:map id="serviceHash" instance-ref="hzInstance" name="service-hash"/>
<hz:map id="persisterHash" instance-ref="hzInstance" name="persister-hash"/>

И теперь это выглядит так:

public class HazelcastConfig
{

    @Bean
    public HazelcastInstance hzInstance(Config hzConfig)
    {
        return Hazelcast.newHazelcastInstance(hzConfig);
    }

    @Bean
    public Config hzConfig(@Value("${members.list}") String membersList)
    {
        Properties properties = new Properties();
        properties.put("hazelcast.logging.type", "slf4j");
        properties.put("hazelcast.jmx", true);
        properties.put("hazelcast.version.check.enabled", false);
        properties.put("hazelcast.icmp.enabled", true);
        properties.put("hazelcast.shutdownhook.enabled", true);
        properties.put("hazelcast.max.operation.timeout", 60000);
        properties.put("hazelcast.restart.on.max.idle", true);

        return new Config().setGroupConfig(new GroupConfig().setName("gsynth").setPassword("gsynth")).setProperties(
                properties).setNetworkConfig(
                new NetworkConfig().setPort(5701).setPortAutoIncrement(false).setJoin(
                        new JoinConfig().setMulticastConfig(new MulticastConfig().setEnabled(false)).setTcpIpConfig(
                                new TcpIpConfig().setEnabled(true).addMember(membersList))));
    }

    @Bean
    public IMap serviceHash(HazelcastInstance hzInstance)
    {
        return hzInstance.getMap("service-hash");
    }

    @Bean
    public IMap persisterHash(HazelcastInstance hzInstance)
    {
        return hzInstance.getMap("persister-hash");
    }

}

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Наконец-то я обнаружил проблему: дело в том, что я использовал свойства вроде этого:

    Properties properties = new Properties();
    properties.put("hazelcast.logging.type", "slf4j");
    properties.put("hazelcast.jmx", true);
    ...

Так что true было установлено как логическое значение.Внутренне Hazelcast в своем исходном коде получал ноль здесь в файле GroupProperties.java на 752-й строке:

String configValue = (config != null) ? config.getProperty(name) : null;

Если вы покопаетесь глубже, вы увидите, что config.getProperty(name) вернет ноль из-за этой причудливой вещи на969-я строка файла Properties.java (как в JDK 1.8.0_102):

Object oval = super.get(key);
String sval = (oval instanceof String) ? (String)oval : null;

oval в этом случае соответствует ключу "hazelcast.jmx", таким образом, является true, но как BOOLEAN не Строка как требуется.

Исправление простое:

Properties properties = new Properties();
properties.put("hazelcast.logging.type", "slf4j");
properties.put("hazelcast.jmx", "true");
...

Просто сделайте все не строковые значения строковыми.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 31 мая 2018

Можете ли вы убедиться, что вы включили JMX Agent, установив системные свойства, как показано ниже

    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=_portNo\_ (to specify JMX port, the default is 1099) (optional)
    -Dcom.sun.management.jmxremote.authenticate=false

Затем попробуйте более простую настройку, как показано ниже, чтобы убедиться, что она работает, и еслиЗатем он проверяет конструкцию конфига в вашей программе.

Config config = new Config();
config.setProperty("hazelcast.jmx", "true");
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);
...