RabbitMQ for Perl mongers

34
RabbitMQ for perl mongers

description

A talk I held at perl mongers Wellington about RabbitMQ and Net::AMQP. A brief introduction to RabbitMQ and some basic code samples on how to use it from perl.

Transcript of RabbitMQ for Perl mongers

Page 1: RabbitMQ for Perl mongers

RabbitMQfor perl mongers

Page 2: RabbitMQ for Perl mongers

__ / \`\ __ | \ `\ /`/ \ \_/`\ \-"-/` /\ \ | | \ | (d b) \_/ / \ ,".|.'.\_/.'.|.", / /\' _|_ '/\ \ | / '-`"`-' \ | | | | | | \ \ / / | jgs \ \ \ / / / `"`\ : /'"` `""`""`

Page 3: RabbitMQ for Perl mongers

AMQPAdvanced Message Queuing Protocol

Page 4: RabbitMQ for Perl mongers

message flow in RabbitMQ

Page 5: RabbitMQ for Perl mongers

RabbitMQ

Exchange

QueueQueue

Page 6: RabbitMQ for Perl mongers

RabbitMQ

Queue

RabbitMQ

Page 7: RabbitMQ for Perl mongers

RabbitMQ

Queue

Page 8: RabbitMQ for Perl mongers

AMQP

RabbitMQ

XMPP STOMP HTTP

XMPP STOMP HTTPAMQP

Page 9: RabbitMQ for Perl mongers

AMQP

RabbitMQ

XMPP STOMP HTTP

XMPP STOMP HTTPAMQP

AMQP

RabbitMQ

XMPP STOMP HTTP

XMPP STOMP HTTPAMQP

Page 10: RabbitMQ for Perl mongers
Page 11: RabbitMQ for Perl mongers

nice pictures but how does it look like?

Page 12: RabbitMQ for Perl mongers

Net::AMQP(::Simple)

Page 13: RabbitMQ for Perl mongers

boilerplate

Page 14: RabbitMQ for Perl mongers

my $spec = { RemoteAddress => '127.0.0.1', RemotePort => { default => 5672 }, Username => { default => 'guest' }, Password => { default => 'guest' }, VirtualHost => { default => '/' },

Logger => 0, Debug => { default => {} },

Alias => { default => 'amqp_client' }, AliasTCP => { default => 'tcp_client' }, Callbacks => { default => {} }, channels => { default => {} }, is_started => { default => 0 },};

Page 15: RabbitMQ for Perl mongers

send a hash

Page 16: RabbitMQ for Perl mongers

# conect to the serverNet::AMQP::Simple::connect($spec);

# push the messageNet::AMQP::Simple::pub( $queue, to_json($hash) );

Page 17: RabbitMQ for Perl mongers

receive a message

Page 18: RabbitMQ for Perl mongers

while ( !$done ) { check( Net::AMQP::Simple::poll() );}

sub check { foreach my $_req (@_) { my $req = from_json($_req); print Dumper($req); $done = 1; }}

Page 19: RabbitMQ for Perl mongers

typical messaging flow

Page 20: RabbitMQ for Perl mongers

the “server”

Page 21: RabbitMQ for Perl mongers

Net::AMQP::Simple::connect($spec);Net::AMQP::Simple::queue("web.domaindb.up");

while (1) { process( Net::AMQP::Simple::poll() );}

sub process { foreach my $_req (@_) { my $req = from_json( $_req, { allow_nonref => 1 } ); ...}

Page 22: RabbitMQ for Perl mongers

the “client”

Page 23: RabbitMQ for Perl mongers

Net::AMQP::Simple::connect($spec);Net::AMQP::Simple::pub( $queue, to_json($hash) );Net::AMQP::Simple::queue( $uuid, 'autodelete' );

while ( !$done ) { check( Net::AMQP::Simple::poll() );}

sub check { foreach my $_req (@_) { my $req = from_json($_req); print Dumper($req); $done = 1; }}

Page 24: RabbitMQ for Perl mongers
Page 25: RabbitMQ for Perl mongers

• start a service that listens on a queue

• push a message to the service and tell the service how to reply (if needed)

• listen on a temp queue for the response (if needed)

in plain english

Page 26: RabbitMQ for Perl mongers

how to reply?

• use AMQP header fields

• roll your own protocol (JSON, XML, ...)

Page 27: RabbitMQ for Perl mongers

... roll your ownif you want to use the full power of RabbitMQ

Page 28: RabbitMQ for Perl mongers

AMQP

RabbitMQ

XMPP STOMP HTTP

XMPP STOMP HTTPAMQP

Page 29: RabbitMQ for Perl mongers

how to get started?

Page 30: RabbitMQ for Perl mongers

• http://rabbitmq.com (get rabbit here)

• http://github.com/norbu09/

• net_amqp (has the Simple.pm)

• RabbitIntro (some samples)

• Net_RabbitMQ_HTTP

Page 32: RabbitMQ for Perl mongers

thanks

Page 33: RabbitMQ for Perl mongers

• the RabbitMQ guys for an awesome product

• iWantMyName for letting me play with all that stuff

• many guys on the mailing list for helping me out when i got stuck

• Catalyst IT for the beers

credits

Page 34: RabbitMQ for Perl mongers

• http://www.ascii-art.com

• http://www.flickr.com/photos/revengingangel/

• http://www.flickr.com/photos/jeff62138/

more credits