Post on 01-Dec-2014
description
Net::RabbitMQ(::Simple)twitter: @thiagorondon - Thiago Rondon <thiago@aware.com.br>
Encontro Técnico - Rio Perl Mongers 2010
Agenda - soluções em filas.
http://www.flickr.com/photos/btsunami/1204911091/
Message
broker
MOM- message-oriented middleware -
Interoperabiliade e
Tarefas assíncronas.
wire-level
store and forward
Publish and Subscribe
Point to Point
Topic/Content
Based
shift vs @_
anycast
multiplexing
virtualhost
chaves vs
metadata
“heartbeat”
Persistência, Prioridades e Confiança.
Na teoria, o protocolo /wire-level/
AMQP
Publisher
Exchange
Bindings:Queues:
Consumer:
message
message
Broker{ [...]
Model
Session
Transport
Analogia utilizada na especificação do AMQP.
Uma mensagem AMQP é como uma mensagem
de e-mail.
Fila de mensagens é como um mailbox.
Consumidor é como um leitor de e-mail, que pode buscar e apagar
e-mails.
Exchange é como um MTA.
Routing Key é como o To:, Cc: ou Bcc:
Cada instancia do Exchange é como se fosse um processo MTA “separado”
O binding é como se fosse uma entrada de
rota no MTA.
As diferenças.
Habilidade para criação em tempo de
execução, de filas, exchanges e rotas.
Estudo de caso.
Topic Exchange.
Routing keys: sp.noticias, sp.tempo,
rio.noticias, rio.tempo.
Binding Keys:sp.# e rio.#
#.noticias e #.tempo
Estratégias para os consumidores.
http://www.flickr.com/photos/21569450@N06/3299124233/
Net::RabbitMQ
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!");
Resolvi, rabiscar um módulo para simplificar
aprender.
E também para saber um pouco mais sobre
Devel::Declare.
mqconnect();
exchange { name => ‘foo’ };
publish { queue => ‘baz’, route => ‘route_baz’, message => ‘foo’ };
consume;
get { options => { routing_keys => ‘perl.#’; }};
tx;
rollback;
commit;
Veja o diretório de
testes, para os exemplos.
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!’ };=
TODO
http://github.com/maluco
http://search.cpan.org/dist/Net-RabbitMQ-Simple/