QueueService.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service;
  4. use App\Job\DemoJob;
  5. use App\Job\LiveRoomDataJob;
  6. use App\Job\LiveRoomSendJob;
  7. use Hyperf\AsyncQueue\Driver\DriverFactory;
  8. use Hyperf\AsyncQueue\Driver\DriverInterface;
  9. class QueueService
  10. {
  11. protected DriverInterface $driver;
  12. public function __construct(DriverFactory $driverFactory)
  13. {
  14. // 投递通道
  15. $this->driver = $driverFactory->get('default');
  16. }
  17. /**
  18. * 生产消息.
  19. * @param mixed $params 数据
  20. * @param int $delay 延时时间 单位秒
  21. */
  22. public function demoPush($params, int $delay = 0): bool
  23. {
  24. // 这里的 `DemoJob` 会被序列化存到 Redis 中,所以内部变量最好只传入普通数据
  25. // 同理,如果内部使用了注解 @Value 会把对应对象一起序列化,导致消息体变大。
  26. // 所以这里也不推荐使用 `make` 方法来创建 `Job` 对象。
  27. return $this->driver->push(new DemoJob($params), $delay);
  28. }
  29. /**
  30. * 直播间访问人数增加
  31. * @param $params
  32. * @param int $delay
  33. * @return bool
  34. */
  35. public function liveRoomDataPush($params, int $delay = 0): bool
  36. {
  37. return $this->driver->push(new LiveRoomDataJob($params), $delay);
  38. }
  39. public function liveRoomSendPush(array $params, int $delay = 0): bool
  40. {
  41. return $this->driver->push(new LiveRoomSendJob($params), $delay);
  42. }
  43. }