#!/usr/bin/env perl
use 5.12.2;
use Crixa;
my $mq = Crixa->connect( host => "localhost", );
my $channel = $mq->channel;
my $q = $channel->queue( name => 'rpc_queue' );
sub fib {
my $n = shift;
return 0 unless $n;
return 1 if $n == 1;
return fib( $n - 1 ) + fib( $n - 2 );
}
$channel->basic_qos( prefetch_count => 1 );
$q->handle_message(
sub {
my $n = int $_->{body};
say " [.] fib($n)";
my $response = fib($n);
$channel->publish(
routing_key => $_->{props}{reply_to},
body => $response,
props => { correlation_id => $_->{props}{correlation_id} },
);
$channel->ack( $_->{delivery_tag} );
}
);
__END__