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
and
Publish
  Subscribe
Pointto
  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                message




         {
             Exchange
Broker       Bindings:    [...]
             Queues:

Consumer:                message
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::Simple;
mqconnect;
publish { queue => ‘queuename’,
message => ‘Hi there!’ };




                =
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!");
TODO
http://github.com/maluco

http://search.cpan.org/dist/Net-
       RabbitMQ-Simple/

Net::RabbitMQ(::Simple)