|
1 | 1 | <?php |
2 | 2 | namespace Imi\Queue\Service; |
3 | 3 |
|
| 4 | +use Imi\Event\Event; |
4 | 5 | use Swoole\Coroutine; |
5 | 6 | use Imi\Aop\Annotation\Inject; |
6 | 7 | use Yurun\Swoole\CoPool\CoPool; |
7 | 8 | use Imi\Queue\Contract\IMessage; |
8 | 9 | use Imi\Queue\Driver\IQueueDriver; |
9 | 10 | use Yurun\Swoole\CoPool\Interfaces\ICoTask; |
10 | 11 | use Yurun\Swoole\CoPool\Interfaces\ITaskParam; |
| 12 | +use Imi\Queue\Event\Param\ConsumerAfterPopParam; |
| 13 | +use Imi\Queue\Event\Param\ConsumerBeforePopParam; |
| 14 | +use Imi\Queue\Event\Param\ConsumerAfterConsumeParam; |
| 15 | +use Imi\Queue\Event\Param\ConsumerBeforeConsumeParam; |
11 | 16 |
|
12 | 17 | /** |
13 | 18 | * 队列消费基类 |
@@ -64,14 +69,28 @@ public function start(?int $co = null) |
64 | 69 | $task = function() use($config){ |
65 | 70 | $queue = $this->imiQueue->getQueue($this->name); |
66 | 71 | do { |
| 72 | + Event::trigger('IMI.QUEUE.CONSUMER.BEFORE_POP', [ |
| 73 | + 'queue' => $queue, |
| 74 | + ], $this, ConsumerBeforePopParam::class); |
67 | 75 | $message = $queue->pop(); |
| 76 | + Event::trigger('IMI.QUEUE.CONSUMER.AFTER_POP', [ |
| 77 | + 'queue' => $queue, |
| 78 | + 'message' => $message, |
| 79 | + ], $this, ConsumerAfterPopParam::class); |
68 | 80 | if(null === $message) |
69 | 81 | { |
70 | 82 | Coroutine::sleep($config->getTimespan()); |
71 | 83 | } |
72 | 84 | else |
73 | 85 | { |
| 86 | + Event::trigger('IMI.QUEUE.CONSUMER.BEFORE_CONSUME', [ |
| 87 | + 'queue' => $queue, |
| 88 | + ], $this, ConsumerBeforeConsumeParam::class); |
74 | 89 | $this->consume($message, $queue); |
| 90 | + Event::trigger('IMI.QUEUE.CONSUMER.AFTER_CONSUME', [ |
| 91 | + 'queue' => $queue, |
| 92 | + 'message' => $message, |
| 93 | + ], $this, ConsumerAfterConsumeParam::class); |
75 | 94 | } |
76 | 95 | } while($this->working); |
77 | 96 | }; |
|
0 commit comments