1. <?php
  2. // Simple message queue components for manual execution
  3. class MessageQueue {
  4. private $queue = [];
  5. public function enqueue(string $message): void {
  6. $this->queue[] = $message;
  7. }
  8. public function dequeue(): ?string {
  9. if (empty($this->queue)) {
  10. return null;
  11. }
  12. return array_shift($this->queue);
  13. }
  14. public function isEmpty(): bool {
  15. return empty($this->queue);
  16. }
  17. }
  18. class Worker {
  19. private $queue;
  20. private $workerId;
  21. public function __construct(MessageQueue $queue, int $workerId) {
  22. $this->queue = $queue;
  23. $this->workerId = $workerId;
  24. }
  25. public function run(): void {
  26. while (true) {
  27. $message = $this->queue->dequeue();
  28. if ($message === null) {
  29. // Queue is empty, sleep and retry
  30. sleep(1);
  31. continue;
  32. }
  33. echo "Worker {$this->workerId} processing: $message\n";
  34. // Simulate processing
  35. sleep(2);
  36. }
  37. }
  38. }
  39. // Example usage:
  40. $queue = new MessageQueue();
  41. // Enqueue some messages
  42. $queue->enqueue("Task 1");
  43. $queue->enqueue("Task 2");
  44. $queue->enqueue("Task 3");
  45. // Create and start workers
  46. $worker1 = new Worker($queue, 1);
  47. $worker2 = new Worker($queue, 2);
  48. $worker1->run();
  49. $worker2->run();
  50. ?>

Add your comment