<div dir="ltr">Opa,<div><br></div><div>dá sim!</div><div><br></div><div>Vamos supor que você quer criar uma fila para processar imagens.</div><div><br></div><div>nos exemplos, usei Redis ou Redis::Client.</div><div><br></div>

<div>o processo seria algo como:</div><div><div><ul><li>recebe a imagem, salva no disco compartilhado ou "cloud", insere no banco (para talvez mostrar para o usuario o status) </li><li>insere na fila dizendo algo como "PROCESSA IMAGEM ID 10"</li>

<li><font face="courier new, monospace">$c->res->body("senta e reza, sua imagem vai ser processada (ou não)") and $c->deatch;</font></li></ul><div>ai você precisa de um worker pra retirar da fila e processar a imagem, salvar o status no banco, etc..</div>

</div><div><br></div><div>para o catalyst/qualquer lugar adicionar na fila, seria algo como:</div><div><br></div><div><font face="courier new, monospace">$cliente_redis->rpush( $nome_da_fila => "json ou alguma coisa assim contendo o id/caminho da imagem" );<br>

</font></div><div><br></div><div><br></div><div>e ai, em um 'worker' você teria o código assim:</div><div><br></div><div><font face="courier new, monospace">while (my $item_da_fila = get_item  ){</font></div><div>

<font face="courier new, monospace"> ...</font></div><div><font face="courier new, monospace">}<br></font></div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><br></font></div>

<div><font face="courier new, monospace">sub get_item {<br></font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">   my ( $list, $item )  = $cliente_redis->blpop( $nome_da_fila, 0 );</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">   if (defined $item) {</font></div><div><font face="courier new, monospace">         return decode_json $item <br></font></div>

<div><font face="courier new, monospace">    }else{</font></div><div><font face="courier new, monospace">        # timeout, mas como ta 0, nunca devieria entrar aqui!</font></div><div><font face="courier new, monospace">    }</font></div>

<div><font face="courier new, monospace">}<br></font></div><div><br></div><div><br></div><div>Ai você ainda pode ter, por exemplo, 10 workers, ou 100, etc..</div><div><br></div><div><br></div><div>ps: Redis::Client não tem algumas coisas... o <a href="https://metacpan.org/module/Redis">https://metacpan.org/module/Redis</a> tem auto-reconnect, por exemplo!</div>

<div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/19 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">O pé de coelho tá instalando o mundo aqui, mas como onde ele vai rodar já tem um mundo e meio instalado, não é problema<div><br></div><div>Cron, não entendi a do redis. Dá pra desenhar? :)</div></div><div class="HOEnZb">

<div class="h5"><div class="gmail_extra">

<br><br><div class="gmail_quote">2013/9/19 Renato Santos <span dir="ltr"><<a href="mailto:renato.cron@gmail.com" target="_blank">renato.cron@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div dir="ltr">pera ai..<div><br></div><div>você precisa só *<b>dispatch</b>*har um job e *<b>detach</b>*ar o processo do catalyst para que ele possa receber outras conexões, certo?</div><div><br></div><div>estranho esses modulos não estarem instalando,</div>





<div><br></div><div>mas você pode utilizar então redis as queue, <a href="http://redis.io/commands/rpoplpush" target="_blank">http://redis.io/commands/rpoplpush</a></div><div><br></div><div>assim você faz o catalyst colocar o job na fila, e alguem processa isso, e 'algum dia' alguem olha o resultado.</div>





<div><br></div><div>Redis é o mais leve, mas existem vários softwares<b> especializados em queue. RabbitMQ, </b>por exemplo.</div><div><br></div><div>Uma duvida: no 5.16 funciona? eu não fui pro 5.18 por que acho que desnecessário por enquanto, por esses motivos (de modulos que podem apresentar problemas "do nada")</div>





</div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>2013/9/19 Blabos de Blebe <span dir="ltr"><<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>></span><br></div>

</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>

<div dir="ltr">Pessoas,<div><br></div><div>Estou querendo despachar alguns jobs para serem executados de forma assíncrona em relação à minha aplicação Catalyst. Eu preciso de sincronização zero. É só despachar e um dia olhar pro resultado.</div>







<div><br></div><div>Dei uma olhada no carinha das engrenagens e no coelhinho, mas os módulos (Gearman e Net::RabbitMQ) não instalam no Perl 5.18.1.</div><div><br></div><div>Vocês tem alguma sugestão alternativa? Outros módulos? Outras abordagens?</div>







<div><br></div><div>Threads está descartado. Fork só se eu ficar muito rico com isso.</div><div><br></div><div>[]'s</div></div>
<br></div></div><div>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></div></blockquote></div><span><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div><div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div>





<div><div style="text-align:right"><font size="1" color="#333333"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font size="1" color="#333333"><a href="http://twitter.com/#!/renato_cron" target="_blank">@renato_cron</a></font></div>






</font></span></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br></div>
</div></div><br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><span style="color:rgb(51,51,51);font-size:x-small">Saravá,</span></div><div><span style="color:rgb(51,51,51);font-size:x-small">Renato CRON</span></div>

<div><div style="text-align:right"><font size="1" color="#333333"><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a></font></div></div><div style="text-align:right"><font size="1" color="#333333"><a href="http://twitter.com/#!/renato_cron" target="_blank">@renato_cron</a></font></div>


</div>