Install

To install the perl broker lib go to GitHub.

Usage

Connecting

use SAPO::Broker::Clients::Simple;

use strict;
use warnings;

# connects to localhost using tcp by default (can also use udp or ssl)
my $broker = SAPO::Broker::Clients::Simple->new(
        host=>'localhost',
        port  => 3323,
        codec => 'protobufxs',
        proto=>'tcp',
); 

Sending Message to a Topic or QUEUE

# .... connect to broker ....

my %options = (
    'destination_type' => 'TOPIC', #can also be QUEUE
    'destination' => '/tests/perl',
);

# now publish something
$broker->publish(%options, 'payload' => "This is the payload");

Subscribing a Queue

# .... connect to broker ....


my %options = (
    'destination_type' => 'QUEUE', #can also be TOPIC
    'destination' => '/tests/perl',
);

# and subscribe to something
$broker->subscribe(%options);

while(1){

    my $notification = $broker->receive; # blocks!!!!

    my $payload = $notification->message->payload;

    # ... do something with your payload ....  

    # acknowledge the message
    $broker->acknowledge($notification);

}

Subscribing a topic

# .... connect to broker ....


my %options = (
    'destination_type' => 'TOPIC',
    'destination' => '/tests/perl',
);

# and subscribe to something
$broker->subscribe(%options);

while(1){

    my $notification = $broker->receive; # blocks!!!!

    my $payload = $notification->message->payload;

    # ... do something with your payload ....  

}

Poll a message with timeout

# .... connect to broker ....


my %options = (
    'destination_type' => 'QUEUE',
    'destination' => '/tests/perl',
    'timeout' => 1000,
);


while(1){

     $broker->poll(%options);

     my $notification;

     eval {
           $notification  = $broker->receive; # blocks!!!!
     };

     if($@){

           my $fault = $@;

           if( ref($fault) eq "SAPO::Broker::Messages::Fault" &&  $fault->fault_code == 2005 ){

               # .... Timeout.....
               print "timeout\n";

           }else{

               print $fault;

           }

           die;
     }


     my $payload = $notification->message->payload;

     # ... do something with your payload ....
     print( $payload );


     # acknowledge the message
     $broker->acknowledge($notification);

}

Poll a message with a higher redelivery timeout

# .... connect to broker ....


my %options = (
    'destination_type' => 'QUEUE',
    'destination' => '/tests/perl',
    'header' => {
        'RESERVE_TIME' => 900000, # The message will be resent to any client after 15 minutes 
    }
);

while(1){

     $broker->poll(%options);

     my $notification;

     eval {
           $notification  = $broker->receive; # blocks!!!!
     };

     if($@){
         print $fault;
         die;
     }

     my $payload = $notification->message->payload;

     # ... do something with your payload ....
     # if your code takes more then 15 min (900000 miliseconds) then the message will be sent to another consumer


     # acknowledge the message
     $broker->acknowledge($notification);

}