swoft微服务实战二十五:RPC注册服务并健康检查

(3). RPC注册服务并健康检查:
app\Consul\RegisterServiceListener.php:

namespace App\Listener;
use Swoft\Bean\Annotation\Mapping\Inject;
use Swoft\Consul\Agent;
use Swoft\Event\Annotation\Mapping\Listener;
use Swoft\Event\EventHandlerInterface;
use Swoft\Event\EventInterface;
use Swoft\Http\Server\HttpServer;
use Swoft\Log\Helper\CLog;
use Swoft\Server\SwooleEvent;
/**
 * @since 2.0
 * @Listener(event=SwooleEvent::START)
 */
class RegisterServiceListener implements EventHandlerInterface
{
    /**
     * @Inject()
     * @var Agent
     */
    private $agent;
    /**
     * @Inject()
     * @var ConsulConfig
     */
    private $config;
    public function handle(EventInterface $event): void
    {
        /** @var HttpServer $httpServer */
        $httpServer = $event->getTarget();
        $service = [
            'ID'                => $this->config->getServiceId(),
            'Name'              => $this->config->getServiceName(),
            'Tags'              => [
                'course_order_rpc',
                'gw.NAMESPACE=App.Rpc.Lib'
            ],
            'Address'           => $this->config->getServiceAddress(),
            'Port'              => $this->config->getServicePort(),
            'Meta'              => [
                'version' => '1.0'
            ],
            'EnableTagOverride' => false,
            'Weights'           => [
                'Passing' => 10,
                'Warning' => 1
            ]
        ];
        // Register
        $this->agent->registerService($service);
        $this->agent->registerCheck([
            "name" => $this->config->getServiceId() . "_check",
            "tcp" => $this->config->getServiceAddress().":".$this->config->getServicePort(),
            "interval" => "10s",
            "timeout" => "5s",
            "serviceid"=>$this->config->getServiceId()
        ]);
        CLog::info('Swoft http register service success by consul!');
    }
}:. 健康检查如果是tcp(这个服务器IP地址),只要连上这个服务器就表示通过,不需要发送什么GET数据.. 健康检查也可以写成http的api.. 使用consul-tag进行参数配置:
   a. 目标RPC服务,在注册时在tag加入namespace参数,可以替代环境变量注入的namespace.
   b. tag是一个数组即可以用来过滤服务,还可以写一些参数或设置.

(3). 修改consul默认地址:
app\bean.php:

return [
    'consul' => [
        'host' => env("ENV_CONSUL_ADDRESS", "192.168.33.88"),   // 这是consul的ip和port
        'port' => env("ENV_CONSUL_PORT", 8500),                 // 注意不能是string类型
    ],
    ...
]:. 如果不修改,默认会注册到本机.. 在docker启动的时候,以环境变量的形式参数注入进来.

(4). 启动服务提到consul ui结果:

注:
Address是docker容器的IP地址.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值