Queue System and Zend\Queue implementation

Post on 28-Nov-2014

731 views 2 download

description

PugMi for Queue System and implementation in PHP with Zend\Queue

transcript

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 19

Ripa Club

gianarb92@gmail.com

Powered byhttp://github.com/ripaclub