Post on 28-Nov-2014
description
http://twitter.com/GianArb 1
Queue system
gianarb92@gmail.com Gianluca Arbezzano
Gianluca Arbezzano@GianArbhttp://github.com/gianarb
http://twitter.com/GianArbGianluca Arbezzano 2
TODO
• Send a mail• Upload big file• Imports• Messagging• …
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 3
Only one Role
gianarb92@gmail.com
You DON’T MAKE to user wait
http://twitter.com/GianArbGianluca Arbezzano 4
The solution is…
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 5
Queue System
gianarb92@gmail.com
• Queue• Producer• Consumer• Message
http://twitter.com/GianArbGianluca Arbezzano 6
Queue
gianarb92@gmail.com
ZendQueue\Queue
// Create an array queue adapter$adapter = new ArrayAdapter();
// Create a queue object$queue = new Queue('queue1', $adapter);
Adapter• Db• MongoDb• MongoCappedCollection• ArrayAdapter• TODO: Redis• TODO: RabbitMQ
http://twitter.com/GianArbGianluca Arbezzano 7
Message Queue
Message queues provide an asynchronous communications protocol, meaning that the sender and receiver of the message do not need to interact with the message queue at the same time.
Cit. Wikipedia
gianarb92@gmail.com
ZendQueue\Message\Message implement Zend\Stdlib\Message
http://twitter.com/GianArbGianluca Arbezzano 8
Producer• Send messages quickly
gianarb92@gmail.com
Consumer
• Receive messages• Usually it’s a worker that consumes one
message at time.
http://twitter.com/GianArbGianluca Arbezzano 9
Queue System, when?
gianarb92@gmail.com
Registration Query Mail
• Time-shifts job processing when the “CPU” is less busy• Distributed computing• In a web app allows to run tasks in backgroundreducing the http request time
http://twitter.com/GianArbGianluca Arbezzano 10
Workflow
gianarb92@gmail.com
Registration QuerySend
Message in queue
Send mail
Send mail
Send mail
Send mail
Send mailWORKER
http://twitter.com/GianArbGianluca Arbezzano 11
Worker (old way)
use ZendQueue\Queue;
do {$messages = $queue->receive();//do some worksleep(1);
} while (…)
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 12
WORKERS!
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 13
Await
gianarb92@gmail.com
$queue->await()
http://twitter.com/GianArbGianluca Arbezzano 14
Role
• Your adapter implement awaitMessage()• || your queue can emulate await
gianarb92@gmail.com
$adapter->awaitMessages(Queue $queue, $callback, ReceiveParameters $params = null)
http://twitter.com/GianArbGianluca Arbezzano 15
*callback
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 16
Worker
use ZendQueue\Queue;use ZendQueue\QueueEvent;
$queue->getEventManager()->attach(QueueEvent::EVENT_RECEIVE, function (QueueEvent $e) use ($queue) { $message = $e->getMessages()->current(); //do some work $queue->delete($message);});
//Wait for incoming messages$queue->await();
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 17
Use case overview
• Short run jobs• Long run jobs• Schedule jobs (like cron jobs)
• Enterprise service bus
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 18
Links!
• Use casehttps://github.com/ripaclub/ZendQueue/wiki/Example-Usage
• Proposalhttps://github.com/ripaclub/ZendQueue/wiki/ZendQueue-Proposal
gianarb92@gmail.com
http://twitter.com/GianArbGianluca Arbezzano 19
Ripa Club
gianarb92@gmail.com
Powered byhttp://github.com/ripaclub