hyperf外网注册consul

撸代码的王 后端 2020-10-26
  • 在app/Listener 文件夹里面创建 RpcRegisterServiceListener.php 代码如下:
<?php
declare(strict_types=1);

namespace App\Listener;


use Hyperf\ServiceGovernance\Listener\RegisterServiceListener;
use InvalidArgumentException;


/**
 * Rpc服务注册到第三方注册中心重写
 *
 * Class RpcRegisterServiceListener
 *
 * @package App\Listener
 */
class RpcRegisterServiceListener extends RegisterServiceListener
{

    /**
     * 重写获取服务与配置信息 -- 使用自定义ip:port注册服务
     *
     * @return array
     */
    protected function getServers(): array
    {
        $result = [];
        $servers = $this->config->get('server.servers', []);
        foreach ($servers as $server) {
            if (! isset($server['name'], $server['host'], $server['port'])) {
                continue;
            }
            if (! $server['name']) {
                throw new InvalidArgumentException('Invalid server name');
            }
            $host = $server['custom_ip'] ?? $server['host']; // 使用自定义ip
            if (in_array($host, ['0.0.0.0', 'localhost'])) {
                $host = $this->getInternalIp();
            }
            if (! filter_var($host, FILTER_VALIDATE_IP)) {
                throw new InvalidArgumentException(sprintf('Invalid host %s', $host));
            }
            $port = $server['custom_port'] ?? $server['port']; // 使用自定义port
            if (! is_numeric($port) || ($port < 0 || $port > 65535)) {
                throw new InvalidArgumentException(sprintf('Invalid port %s', $port));
            }
            $port = (int) $port;
            $result[$server['name']] = [$host, $port];
        }

        return $result;
    }
}

hyperf外网注册consul



  • 在config文件里面的 dependencies.php 文件引入刚创建的

hyperf外网注册consul


  • 修改server.php的文件内容

hyperf外网注册consul


  • 添加env的环境变量

hyperf外网注册consul

Apipost 私有化火热进行中

评论