ConfigFetcherProcess.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 Hyperf\ConfigCenter\Process;
  12. use Hyperf\ConfigCenter\DriverFactory;
  13. use Hyperf\ConfigCenter\Mode;
  14. use Hyperf\Contract\ConfigInterface;
  15. use Hyperf\Contract\StdoutLoggerInterface;
  16. use Hyperf\Process\AbstractProcess;
  17. use Hyperf\Process\ProcessManager;
  18. use Psr\Container\ContainerInterface;
  19. use Psr\Log\LoggerInterface;
  20. use Swoole\Server;
  21. class ConfigFetcherProcess extends AbstractProcess
  22. {
  23. public string $name = 'config-center-fetcher';
  24. /**
  25. * @var Server
  26. */
  27. protected $server;
  28. protected ConfigInterface $config;
  29. protected LoggerInterface $logger;
  30. protected DriverFactory $driverFactory;
  31. public function __construct(ContainerInterface $container)
  32. {
  33. parent::__construct($container);
  34. $this->config = $container->get(ConfigInterface::class);
  35. $this->logger = $container->get(StdoutLoggerInterface::class);
  36. $this->driverFactory = $container->get(DriverFactory::class);
  37. }
  38. public function bind($server): void
  39. {
  40. $this->server = $server;
  41. parent::bind($server);
  42. }
  43. public function isEnable($server): bool
  44. {
  45. return $server instanceof Server
  46. && $this->config->get('config_center.enable', false)
  47. && strtolower($this->config->get('config_center.mode', Mode::PROCESS)) === Mode::PROCESS;
  48. }
  49. public function handle(): void
  50. {
  51. $driver = $this->config->get('config_center.driver', '');
  52. if (! $driver) {
  53. return;
  54. }
  55. $instance = $this->driverFactory->create($driver, [
  56. 'setServer' => $this->server,
  57. ]);
  58. $instance->createMessageFetcherLoop();
  59. while (ProcessManager::isRunning()) {
  60. sleep(1);
  61. }
  62. }
  63. }