Hello All,

(Sample code of what we are trying is at the end of the email)

I would like to use Net::Stomp to write a Nagios check for ActiveMQ
and Net::Stomp looks ideal for this. The idea is like so:

* send.pl() - This would push a message onto a monitoring queue.
* receive.pl() - This would consume the message from the monitoring
queue placed by send.pl

If receive.pl does not receive the message sent by send.pl or send.pl
cannot connect then an alert is raised. I realise that there may be
some added complexity in making sure that receive.pl really reads the
correct message but we would like something to get us started.

However, we encountered two issues:

* Net::Stomp's receive_frame() method continually waits for a new
message to arrive on ActiveMQ. What we would like is to check if a
specific (or any for that matter) message has arrived and then exit
with an exit code determined by whether the aforementioned message had
arrived or not.

* So, I discovered the can_read() method - this sounded ideal as the
documentation implied (to me at least) that if there are messages
waiting on the queue can_read() will return a certain value. However,
can_read() always returns the same value(0), no matter if there are
messages on the queue or not.

If anyone can shed some light on this - it would be much appreciated!

Thanks,

Fred.

*Code follows*

   my($queue) = @_;
   my $content;

   my $stomp = Net::Stomp->new( { hostname => 'localhost', port => '61613' } );
   $stomp->connect( { 'login' => '', 'passcode' => '' } ) || die
"Cannot connect to ActiveMQ Server\n";
   $stomp->subscribe( { destination => '/queue/monitor', ack => 'client' } );

   my $can_read = $stomp->can_read;
   print "Can read is $can_read\n";
   if ($can_read) {
       print "I can read a frame\n";
   } else {
       print "No frames waiting\n";
   }

Reply via email to