I'm using can_read() in a similar way as you and it works. Perhaps you're not waiting long enough?
Try setting a timeout. #This will wait on the socket for up to 5 seconds my $can_read = $stomp->can_read(5); On Tue, Aug 19, 2008 at 2:30 AM, Friedrich Clausen <[EMAIL PROTECTED]> wrote: > 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"; > } >