QueueService.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service;
  4. use App\Job\DemoJob;
  5. use App\Job\PlayerJob;
  6. use App\Job\QuestionJob;
  7. use App\Job\BindjigouJob;
  8. use Hyperf\AsyncQueue\Driver\DriverFactory;
  9. use Hyperf\AsyncQueue\Driver\DriverInterface;
  10. class QueueService
  11. {
  12. protected DriverInterface $driver;
  13. public function __construct(DriverFactory $driverFactory)
  14. {
  15. // 投递通道
  16. $this->driver = $driverFactory->get('default');
  17. }
  18. /**
  19. * 生产消息.
  20. * @param mixed $params 数据
  21. * @param int $delay 延时时间 单位秒
  22. */
  23. public function demoPush($params, int $delay = 0): bool
  24. {
  25. // 这里的 `DemoJob` 会被序列化存到 Redis 中,所以内部变量最好只传入普通数据
  26. // 同理,如果内部使用了注解 @Value 会把对应对象一起序列化,导致消息体变大。
  27. // 所以这里也不推荐使用 `make` 方法来创建 `Job` 对象。
  28. return $this->driver->push(new DemoJob($params), $delay);
  29. }
  30. /**
  31. * 生产消息.
  32. * @param mixed $params 数据
  33. * @param int $delay 延时时间 单位秒
  34. */
  35. public function playerPush($params, int $delay = 0): bool
  36. {
  37. // 这里的 `DemoJob` 会被序列化存到 Redis 中,所以内部变量最好只传入普通数据
  38. // 同理,如果内部使用了注解 @Value 会把对应对象一起序列化,导致消息体变大。
  39. // 所以这里也不推荐使用 `make` 方法来创建 `Job` 对象。
  40. return $this->driver->push(new PlayerJob($params), $delay);
  41. }
  42. /**
  43. * 生产消息.
  44. * @param mixed $params 数据
  45. * @param int $delay 延时时间 单位秒
  46. */
  47. public function questionPush($params, int $delay = 0): bool
  48. {
  49. // 这里的 `DemoJob` 会被序列化存到 Redis 中,所以内部变量最好只传入普通数据
  50. // 同理,如果内部使用了注解 @Value 会把对应对象一起序列化,导致消息体变大。
  51. // 所以这里也不推荐使用 `make` 方法来创建 `Job` 对象。
  52. return $this->driver->push(new QuestionJob($params), $delay);
  53. }
  54. /**
  55. * 生产消息.
  56. * @param mixed $params 数据
  57. * @param int $delay 延时时间 单位秒
  58. */
  59. public function bindjigouPush($params, int $delay = 0): bool
  60. {
  61. // 这里的 `DemoJob` 会被序列化存到 Redis 中,所以内部变量最好只传入普通数据
  62. // 同理,如果内部使用了注解 @Value 会把对应对象一起序列化,导致消息体变大。
  63. // 所以这里也不推荐使用 `make` 方法来创建 `Job` 对象。
  64. return $this->driver->push(new BindjigouJob($params), $delay);
  65. }
  66. }