QueueHandleListener.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * This file is part of Hyperf.
  5. *
  6. * @link https://www.hyperf.io
  7. * @document https://hyperf.wiki
  8. * @contact group@hyperf.io
  9. * @license https://github.com/hyperf/hyperf/blob/master/LICENSE
  10. */
  11. namespace App\Listener;
  12. use Hyperf\AsyncQueue\AnnotationJob;
  13. use Hyperf\AsyncQueue\Event\AfterHandle;
  14. use Hyperf\AsyncQueue\Event\BeforeHandle;
  15. use Hyperf\AsyncQueue\Event\Event;
  16. use Hyperf\AsyncQueue\Event\FailedHandle;
  17. use Hyperf\AsyncQueue\Event\RetryHandle;
  18. use Hyperf\Event\Annotation\Listener;
  19. use Hyperf\Event\Contract\ListenerInterface;
  20. use Hyperf\Logger\LoggerFactory;
  21. use Psr\Container\ContainerInterface;
  22. use Psr\Log\LoggerInterface;
  23. #[Listener]
  24. class QueueHandleListener implements ListenerInterface
  25. {
  26. protected LoggerInterface $logger;
  27. public function __construct(ContainerInterface $container)
  28. {
  29. $this->logger = $container->get(LoggerFactory::class)->get('queue');
  30. }
  31. public function listen(): array
  32. {
  33. return [
  34. AfterHandle::class,
  35. BeforeHandle::class,
  36. FailedHandle::class,
  37. RetryHandle::class,
  38. ];
  39. }
  40. public function process(object $event): void
  41. {
  42. if ($event instanceof Event && $event->getMessage()->job()) {
  43. $job = $event->getMessage()->job();
  44. $jobClass = get_class($job);
  45. if ($job instanceof AnnotationJob) {
  46. $jobClass = sprintf('Job[%s@%s]', $job->class, $job->method);
  47. }
  48. $date = date('Y-m-d H:i:s');
  49. switch (true) {
  50. case $event instanceof BeforeHandle:
  51. $this->logger->info(sprintf('[%s] Processing %s.', $date, $jobClass));
  52. break;
  53. case $event instanceof AfterHandle:
  54. $this->logger->info(sprintf('[%s] Processed %s.', $date, $jobClass));
  55. break;
  56. case $event instanceof FailedHandle:
  57. $this->logger->error(sprintf('[%s] Failed %s.', $date, $jobClass));
  58. $this->logger->error((string) $event->getThrowable());
  59. break;
  60. case $event instanceof RetryHandle:
  61. $this->logger->warning(sprintf('[%s] Retried %s.', $date, $jobClass));
  62. break;
  63. }
  64. }
  65. }
  66. }