I am experimenting with RabbitMQ and Perl for a pet project of mine: gravity.
The Perl module Net::RabbitMQ seems to be usable, finally. I decided to give it a go, and reproduce with Perl the python scripts shown in the official RabbitMQ tutorial.
Tutorial 1 starts, unsurprisingly, with an "Hello world!" example:
let's send a message, receive it and print it on the screen. To do so we need two programs: one that sends a message and one that receives and prints it.
I am not going to redo the whole tutorial, just show the finished code. Please refer to the tutorial and to Net::RabbitMQ's documentation for the details. …send.pl
#!/usr/bin/perl use strict ; use warnings ; use Net::RabbitMQ ; { # closure to return a new channel ID every time we call nextchan my $nextchan = 1 ; sub nextchan { return $nextchan++ } ; } ### BEGIN CONFIGURABLE PARAMETERS ###################################### my $qserver = q{localhost} ; my %qparms = () ; my $qname = q{gravity.checks} ; my $message = q{Test injection} ; ### NO CONFIGURABLE PARAMETERS BELOW THIS LINE ######################### my $mq = Net::RabbitMQ->new() ; my $chanID = nextchan() ; $message .= " ".scalar(localtime) ; print STDERR qq{Will try to send message "$message" through channel $chanIDn} ; $mq->connect($qserver, %qparms) ; $mq->channel_open($chanID) ; $mq->queue_declare($chanID,$qname,,) ; $mq->publish($chanID,$qname,$message,{ exchange => "" },) ; print STDERR qq{Message "$message" sent to queue $qnamen} ; $mq->disconnect ;
receive.pl
#!/usr/bin/perl use strict ; use warnings ; use Net::RabbitMQ ; { # closure to return a new channel ID every time we call nextchan my $nextchan = 1 ; sub nextchan { return $nextchan++ } ; } ### BEGIN CONFIGURABLE PARAMETERS ###################################### my $qserver = q{localhost} ; my %qparms = () ; my $qname = q{gravity.checks} ; ### NO CONFIGURABLE PARAMETERS BELOW THIS LINE ######################### my $mq = Net::RabbitMQ->new() ; my $chanID = nextchan() ; $mq->connect($qserver, %qparms) ; $mq->channel_open($chanID) ; $mq->queue_declare($chanID,$qname,,) ; for (my $message = $mq->get($chanID,$qname,) ; defined $message ; $message = $mq->get($chanID,$qname,) ) { print STDERR qq{Received from queue $qname:n}.$message->{body}.qq{nn} ; } print STDERR qq{No more messages in queuen} ; $mq->disconnect ;
output
bronto@gravity:/gravity/tutorial-1$ ./send.pl Will try to send message "Test injection Sun Jan 13 12:52:45 2013" through channel 1 Message "Test injection Sun Jan 13 12:52:45 2013" sent to queue gravity.checks bronto@gravity:/gravity/tutorial-1$ ./receive.pl Received from queue gravity.checks: Test injection Sun Jan 13 12:52:45 2013 No more messages in queue
Pingback: Porting RabbitMQ Tutorials to Perl Net::RabbitMQ | crashingdaily