如何从“org.apache.activemq.command.Message”获取actievmq队列的大小?

时间:2017-05-04 11:24:33

标签: activemq

我想覆盖BrokerFilter类的send()方法。

此方法有两个参数:ProducerBrokerExchange和Message。

我可以从这两个参数中获取目标队列的大小吗?

我正在使用activemq-all-5.13.2.jar。

2 个答案:

答案 0 :(得分:1)

您可以参考StatisticsBrokerPlugin。

如果其他人需要,代码就在这里。

    ActiveMQDestination msgDest = messageSend.getDestination();
    String physicalName = msgDest.getPhysicalName();
    logger.info("dest: " + physicalName);

    ActiveMQDestination queryDestination = ActiveMQDestination.createDestination(physicalName, msgDest.getDestinationType());
    Set<Destination> destinations = getDestinations(queryDestination);
    logger.info(destinations);
    long count = 0;
    for (Destination dest : destinations) {
        DestinationStatistics stats = dest.getDestinationStatistics();
        if (stats != null) {
            count = stats.getMessageSize().getCount();
            logger.info("size: " + count);
        }
    }

答案 1 :(得分:0)

你可以使用:

BrokerFilter.getRegionDestination().getDestinationStatistics().getMessages().getCount();

您在org.apache.activemq.broker.region.DestinationStatistics中拥有所有这些统计信息:

enqueues = new CountStatisticImpl("enqueues", "The number of messages that have been sent to the destination");
dispatched = new CountStatisticImpl("dispatched", "The number of messages that have been dispatched from the destination");
dequeues = new CountStatisticImpl("dequeues", "The number of messages that have been acknowledged from the destination");
forwards = new CountStatisticImpl("forwards", "The number of messages that have been forwarded to a networked broker from the destination");
inflight = new CountStatisticImpl("inflight", "The number of messages dispatched but awaiting acknowledgement");
expired = new CountStatisticImpl("expired", "The number of messages that have expired");

consumers = new CountStatisticImpl("consumers", "The number of consumers that that are subscribing to messages from the destination");
consumers.setDoReset(false);
producers = new CountStatisticImpl("producers", "The number of producers that that are publishing messages to the destination");
producers.setDoReset(false);
messages = new CountStatisticImpl("messages", "The number of messages that that are being held by the destination");
messages.setDoReset(false);
messagesCached = new PollCountStatisticImpl("messagesCached", "The number of messages that are held in the destination's memory cache");
processTime = new TimeStatisticImpl("processTime", "information around length of time messages are held by a destination");
blockedSends = new CountStatisticImpl("blockedSends", "number of messages that have to wait for flow control");
blockedTime = new TimeStatisticImpl("blockedTime","amount of time messages are blocked for flow control");
messageSize = new SizeStatisticImpl("messageSize","Size of messages passing through the destination");