<?php
// Simple message queue components for manual execution
class MessageQueue {
private $queue = [];
public function enqueue(string $message): void {
$this->queue[] = $message;
}
public function dequeue(): ?string {
if (empty($this->queue)) {
return null;
}
return array_shift($this->queue);
}
public function isEmpty(): bool {
return empty($this->queue);
}
}
class Worker {
private $queue;
private $workerId;
public function __construct(MessageQueue $queue, int $workerId) {
$this->queue = $queue;
$this->workerId = $workerId;
}
public function run(): void {
while (true) {
$message = $this->queue->dequeue();
if ($message === null) {
// Queue is empty, sleep and retry
sleep(1);
continue;
}
echo "Worker {$this->workerId} processing: $message\n";
// Simulate processing
sleep(2);
}
}
}
// Example usage:
$queue = new MessageQueue();
// Enqueue some messages
$queue->enqueue("Task 1");
$queue->enqueue("Task 2");
$queue->enqueue("Task 3");
// Create and start workers
$worker1 = new Worker($queue, 1);
$worker2 = new Worker($queue, 2);
$worker1->run();
$worker2->run();
?>
Add your comment