The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
################################################################################ 
#
# Sample STOMP Message Consumer using AnyEvent::STOMP::Client
#
################################################################################

use AnyEvent;
use AnyEvent::STOMP::Client;

my $cv = AnyEvent->condvar;
my $stomp_client = new AnyEvent::STOMP::Client();
$stomp_client->connect();

$stomp_client->on_connected(
    sub {
        print "Connection established!\n";
        shift->subscribe('/queue/test-destination', 'client');
    }
);

$stomp_client->on_subscribed(
    sub {
        my ($self, $destination) = @_;
        print "Subscribed to '$destination'!\n";
    }
);

$stomp_client->on_message(
    sub {
        my ($self, $header, $body) = @_;
        print "MESSAGE\n";
        foreach (sort keys %$header) {
            print "$_:$header->{$_}\n";
        }
        print "\n$body\n";

        $self->ack($header->{'ack'}) if (defined $header->{'ack'});
    }
);

$w = AnyEvent->timer(
    after => 10,
    cb => sub {
        $stomp_client->unsubscribe('/queue/test-destination');
    }
);

$stomp_client->on_unsubscribed(
    sub {
        my ($self, $destination) = @_;
        print "Unsubscribed from '$destination'!\n";
        $self->disconnect;
    }
);

$stomp_client->on_disconnected(sub { $cv->send; });

$cv->recv;