Broker Configuration

To configure ActiveMQ to use the statistics plugin add the following to the ActiveMQ XML configuration:

<plugins>
  <statisticsBrokerPlugin/>
</plugins>

The statistics plugin looks for messages sent to particular destinations.

Query running broker statistics

To query the running statistics of the message broker, the client sends an empty message to a Destination named ActiveMQ.Statistics.Broker, and sets the replyto field with the Destination you want to receive the result on. The statistics plugin will send a  MapMessage filled with the statistics for the running ActiveMQ broker.

Source code

[sourcecode language=”Delphi”]
program DestStatistics;

(**
Requires ActiveMQ 5.3 or higher
To configure ActiveMQ to use the statistics plugin, add the following to the ActiveMQ XML configuration:
<broker>

<plugins>
<statisticsBrokerPlugin/>
</plugins>

</broker>

Usage:
——
DestStatistics [destination]
If no destination is specified, the program returns the broker statistics

Reference
———
http://activemq.apache.org/statisticsplugin.html
https://issues.apache.org/activemq/browse/AMQ-2379
http://rajdavies.blogspot.com/2009/10/query-statistics-for-apache-activemq.html

You can also use wildcards too, and receive a separate message for every destination matched.
*)

{$APPTYPE CONSOLE}

uses
SysUtils,
BTCommAdapterIndy, BTMessageTransformerXMLMapOmni,
BTJMSInterfaces, BTJMSConnection, BTSessionIntf, BTSerialIntf,
BTStompTypes, BTTypes,
Classes;

var
Connection: IConnection;
Session: ISession;
Producer: IMessageProducer;
Consumer: IMessageConsumer;
Destination, ReplyQueue: IQueue;
JMSMessage: ITextMessage;
Reply: IMapMessage;
MapNames: PMStrings;
I: Integer;
Key: string;

begin
Connection := TBTJMSConnection.MakeConnection;
try
try
// Create and assign the message transformer
SetTransformer(Connection, TBTMessageTransformerXMLMapOmni.Create(nil));

Connection.Start;
Session := Connection.CreateSession(False, amAutoAcknowledge);

// listen on reply queue
ReplyQueue := Session.CreateQueue(‘Habari’ + ‘?’ +
BTStompTypes.SH_TRANSFORMATION + ‘=’ + TRANSFORMER_ID_MAP_XML);
Consumer := Session.CreateConsumer(ReplyQueue);

// create the pseudo destination
if ParamCount = 0 then
begin
Destination := Session.CreateQueue(‘ActiveMQ.Statistics.Broker’);
end
else
begin
Destination := Session.CreateQueue(‘ActiveMQ.Statistics.Destination.’ + ParamStr(1));
end;

// display destination name
WriteLn(‘Request statistics for ‘ + Destination.QueueName + ‘ …’);

// create the message and set reply queue name
JMSMessage := Session.CreateTextMessage;
JMSMessage.JMSReplyTo := ReplyQueue;
Producer := Session.CreateProducer(Destination);
Producer.Send(JMSMessage);

// read the result message
Reply := Consumer.Receive(1000) as IMapMessage;

// list the map key/values
while Assigned(Reply) do
begin
MapNames := Reply.GetMapNames;
for I := 0 to Length(MapNames) – 1 do
begin
Key := MapNames[I];
WriteLn(Key + ‘=’ + Reply.GetString(Key));
end;
WriteLn;
Reply := Consumer.Receive(1000) as IMapMessage;
end;

WriteLn(‘No more message on queue ‘ + ReplyQueue.QueueName);

Connection.Stop;

except
on E: Exception do
WriteLn(E.Message);
end;
finally
Connection.Close;
end;

WriteLn(‘Press any key’);
ReadLn;
end.

[/sourcecode]

 


Query Statistics for Apache ActiveMQ with Delphi

Discover more from Habarisoft Blog

Subscribe to get the latest posts sent to your email.

One thought on “Query ActiveMQ Broker Statistics with Delphi

Leave a Reply

Your email address will not be published. Required fields are marked *