net::rabbitmq(::simple)
DESCRIPTION
TRANSCRIPT
![Page 1: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/1.jpg)
Net::RabbitMQ(::Simple)twitter: @thiagorondon - Thiago Rondon <[email protected]>
Encontro Técnico - Rio Perl Mongers 2010
![Page 2: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/2.jpg)
Agenda - soluções em filas.
![Page 3: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/3.jpg)
http://www.flickr.com/photos/btsunami/1204911091/
![Page 4: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/4.jpg)
Message
broker
![Page 5: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/5.jpg)
MOM- message-oriented middleware -
![Page 6: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/6.jpg)
Interoperabiliade e
Tarefas assíncronas.
![Page 7: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/7.jpg)
wire-level
![Page 8: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/8.jpg)
store and forward
![Page 9: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/9.jpg)
Publish and Subscribe
![Page 10: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/10.jpg)
Point to Point
![Page 11: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/11.jpg)
Topic/Content
Based
![Page 12: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/12.jpg)
shift vs @_
![Page 13: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/13.jpg)
anycast
![Page 14: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/14.jpg)
multiplexing
![Page 15: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/15.jpg)
virtualhost
![Page 16: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/16.jpg)
chaves vs
metadata
![Page 17: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/17.jpg)
“heartbeat”
![Page 18: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/18.jpg)
Persistência, Prioridades e Confiança.
![Page 19: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/19.jpg)
Na teoria, o protocolo /wire-level/
AMQP
![Page 20: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/20.jpg)
Publisher
Exchange
Bindings:Queues:
Consumer:
message
message
Broker{ [...]
![Page 21: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/21.jpg)
Model
Session
Transport
![Page 22: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/22.jpg)
Analogia utilizada na especificação do AMQP.
![Page 23: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/23.jpg)
Uma mensagem AMQP é como uma mensagem
de e-mail.
![Page 24: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/24.jpg)
Fila de mensagens é como um mailbox.
![Page 25: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/25.jpg)
Consumidor é como um leitor de e-mail, que pode buscar e apagar
e-mails.
![Page 26: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/26.jpg)
Exchange é como um MTA.
![Page 27: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/27.jpg)
Routing Key é como o To:, Cc: ou Bcc:
![Page 28: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/28.jpg)
Cada instancia do Exchange é como se fosse um processo MTA “separado”
![Page 29: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/29.jpg)
O binding é como se fosse uma entrada de
rota no MTA.
![Page 30: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/30.jpg)
As diferenças.
![Page 31: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/31.jpg)
Habilidade para criação em tempo de
execução, de filas, exchanges e rotas.
![Page 32: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/32.jpg)
Estudo de caso.
![Page 33: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/33.jpg)
Topic Exchange.
![Page 34: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/34.jpg)
Routing keys: sp.noticias, sp.tempo,
rio.noticias, rio.tempo.
![Page 35: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/35.jpg)
Binding Keys:sp.# e rio.#
#.noticias e #.tempo
![Page 36: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/36.jpg)
Estratégias para os consumidores.
![Page 37: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/37.jpg)
http://www.flickr.com/photos/21569450@N06/3299124233/
![Page 38: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/38.jpg)
Net::RabbitMQ
![Page 39: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/39.jpg)
use Net::RabbitMQ;my $mq = Net::RabbitMQ->new();$mq->connect("localhost", { user => "guest", password => "guest" });$mq->channel_open(1);$mq->publish(1, "queuename", "Hi there!");
![Page 40: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/40.jpg)
Resolvi, rabiscar um módulo para simplificar
aprender.
![Page 41: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/41.jpg)
E também para saber um pouco mais sobre
Devel::Declare.
![Page 42: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/42.jpg)
mqconnect();
![Page 43: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/43.jpg)
exchange { name => ‘foo’ };
![Page 44: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/44.jpg)
publish { queue => ‘baz’, route => ‘route_baz’, message => ‘foo’ };
![Page 45: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/45.jpg)
consume;
![Page 46: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/46.jpg)
get { options => { routing_keys => ‘perl.#’; }};
![Page 47: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/47.jpg)
tx;
![Page 48: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/48.jpg)
rollback;
![Page 49: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/49.jpg)
commit;
![Page 50: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/50.jpg)
Veja o diretório de
testes, para os exemplos.
![Page 51: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/51.jpg)
use Net::RabbitMQ;my $mq = Net::RabbitMQ->new();$mq->connect("localhost", { user => "guest", password => "guest" });$mq->channel_open(1);$mq->publish(1, "queuename", "Hi there!");
use Net::RabbitMQ::Simple;mqconnect;publish { queue => ‘queuename’,message => ‘Hi there!’ };=
![Page 52: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/52.jpg)
TODO
![Page 53: Net::RabbitMQ(::Simple)](https://reader034.vdocuments.net/reader034/viewer/2022051513/547c319bb47959c0508b45ed/html5/thumbnails/53.jpg)
http://github.com/maluco
http://search.cpan.org/dist/Net-RabbitMQ-Simple/