InstanceNotFoundException при попытке получить Activemq MBean - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть следующая конфигурация:

@Configuration
public class ConfigureRMI {
    @Value("${jmx.rmi.host:localhost}")
    private String rmiHost;

    @Value("${jmx.rmi.port:1099}")
    private Integer rmiPort;

    @Bean
    public RmiRegistryFactoryBean rmiRegistry() {
        final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();
        rmiRegistryFactoryBean.setPort(rmiPort);
        rmiRegistryFactoryBean.setAlwaysCreate(true);
        return rmiRegistryFactoryBean;
    }

    @Bean
    @DependsOn("rmiRegistry")
    public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {
        final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
        connectorServerFactoryBean.setObjectName("connector:name=rmi");
        connectorServerFactoryBean.setServiceUrl(String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));
    return connectorServerFactoryBean;
    }

    @Bean
    @DependsOn("connectorServerFactoryBean")
    public DestinationViewMBean queueMonitor() {

        JMXConnectorServer connector = null;
        MBeanServerConnection connection;
        ObjectName nameConsumers;
        try {
            connector = connectorServerFactoryBean().getObject();
            connection = connector.getMBeanServer();
            nameConsumers = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=tasks");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        DestinationViewMBean mbView = MBeanServerInvocationHandler.newProxyInstance(connection, nameConsumers, DestinationViewMBean.class, true);
        return mbView;
    }
}

Он настраивает и создает экземпляр DestinationViewMBean, который я пытаюсь использовать позже в коде, подобном этому:

Long queueSize = queueMonitor.getQueueSize();

Но он выдает исключение javax.management.InstanceNotFoundException: org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=tasks Я уверен, что имена, как я напечатал.Я вижу имя брокера и очередь tasks в веб-консоли ActiveMQ, элементы ставятся в очередь и удаляются в соответствии с назначением.Но я не могу контролировать размер очереди.Метод, который я использовал (тот, который я предоставил), был сделан из многих ответов здесь на SO и man-страницах в JMX и ActiveMQ.

Мне интересно, упустил ли я что-то очевидное.Я выключил брандмауэр, я на локальном хосте.Почему DestinationViewMBean не может найти очередь?

UPD: я использовал JConsole для проверки имени MBean.Мне удалось исправить InstanceNotFoundException, но теперь я не могу получить какой-либо атрибут из компонента.Я пробовал многие из них в отладчике (просто запустите через атрибуты, которые я мог найти в интерфейсе DestinationViewMBean)Но при каждой попытке получения атрибута я получаю javax.management.AttributeNotFoundException: getAttribute failed: ModelMBeanAttributeInfo not found for QueueSize (или любой другой атрибут).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...