我想覆盖BrokerFilter类的send()方法。
此方法有两个参数:ProducerBrokerExchange和Message。
我可以从这两个参数中获取目标队列的大小吗?
我正在使用activemq-all-5.13.2.jar。
答案 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");