Как получить размер (глубину) очереди в Artemis

Как с помощью клиентского API Java получить размер очереди в удаленном брокере ActiveMQ Artemis 2.4.0?


person Eduardo Ito    schedule 11.03.2018    source источник


Ответы (2)


Такая функция, как статистика, принадлежит API управления. Доступ к нему можно получить через HTTP (jolokia), JMX или JMX через API обмена сообщениями.

В официальной документации есть пример для пользователей, достаточно настойчивых, чтобы читать Это. Я процитирую это здесь для удобства.

ClientSession session = ...
ClientRequestor requestor = new ClientRequestor(session, "activemq.management");
ClientMessage message = session.createMessage(false);
ManagementHelper.putAttribute(message, "queue.exampleQueue", "messageCount");
session.start();
ClientMessage reply = requestor.request(m);
int count = (Integer) ManagementHelper.getResult(reply);
System.out.println("There are " + count + " messages in exampleQueue");
person Petter Nordlander    schedule 12.03.2018
comment
Я искал размер очереди в документации, но на языке Artemis это должно быть количество сообщений ... Спасибо! Кстати, атрибут messageCount является длинным, а не целым числом. - person Eduardo Ito; 12.03.2018

Это полный исполняемый пример:

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Session;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.client.ClientMessage;
import org.apache.activemq.artemis.api.core.client.ClientRequestor;
import org.apache.activemq.artemis.api.core.client.ClientSession;
import org.apache.activemq.artemis.api.core.management.ManagementHelper;
import org.apache.activemq.artemis.jms.client.ActiveMQSession;

String queueName = "MY.QUEUE";

Hashtable<String, String> env = new Hashtable<>();
env.put("java.naming.factory.initial", "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
env.put("java.naming.provider.url", "tcp://localhost:61616");
InitialContext initialContext = new InitialContext(env);
ConnectionFactory cf = (ConnectionFactory)initialContext.lookup("ConnectionFactory");
Connection connection = cf.createConnection();
Session jmsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
ClientSession session = ((ActiveMQSession)jmsSession).getCoreSession();

ClientRequestor requestor = new ClientRequestor(session, "activemq.management");

session.start();

ClientMessage message = session.createMessage(false);
ManagementHelper.putAttribute(message, "queue." + queueName, "messageCount");

ClientMessage reply = requestor.request(message);

long count = (Long)ManagementHelper.getResult(reply);
System.out.println("There are " + count + " messages in " + queueName);
person Eduardo Ito    schedule 12.03.2018