Top Banner
RabbitMQ for perl mongers
34

RabbitMQ for Perl mongers

May 10, 2015

Download

Technology

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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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