编码方式向Consul注册我们的Swoole服务

编码方式向Consul注册我们的Swoole服务

前面简单认识了Consul,通过终端命令的方式演示了如何注册service和反注册service。

下面我们使用编码的方式,看看能否往Consul中注册服务?
1、根据Consul官网
https://www.consul.io/api/agent/service.html
提供的Agent HTTP API我们封装一个Consul工具类。

ConsulToolClass.php代码如下:

<?php

/**
 * 封装一个Consul工具类
 * Class ConsulToolClass
 */
class ConsulToolClass{

    public $ip = "10.211.55.17";
    public $port = "8500";

    /**
     * 注册服务
     * @param $json
     * @return mixed
     */
    public function registerService($json){
        return $this->curlPUT("/v1/agent/service/register",$json);
    }

    /**
     * 销毁服务
     * @param $service_id
     * @return mixed
     */
    public function deregisterService($service_id){
        return $this->curlPUT("/v1/agent/service/deregister/$service_id",null);
    }

    /**
     * PUT请求
     * @param $request_uri
     * @param $data
     * @return mixed
     */
    public function curlPUT($request_uri,$data){
        $ch = curl_init();
        $header[] = "Content-type:application/json";

        curl_setopt($ch,CURLOPT_URL,"http://".$this->ip.":".$this->port.$request_uri);
        curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"PUT");
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);

        $res = curl_exec($ch);
        curl_close($ch);

        return $res;
    }
}

2、我们的需求是在我们创建swoole服务的时候,把服务注册到Consul(用Consul来管理我们的swoole服务)
思考:在swoole服务哪一个回调函数中,来完成往consul注册呢?
https://wiki.swoole.com/wiki/page/p-event/onStart.html
查看swoole文档得知:onStart是在Server启动在主进程的主线程回调此函数。

所以我们把swoole服务代码(我们还是创建一个HttpServer)修改为如下:

<?php

// 引入Consul工具类
require_once("./ConsulToolClass.php");

$http = new swoole_http_server("10.211.55.17", 9501);
$http->set(array('worker_num' => 4));


// 监听start事件
$http->on('start', function () {
      $data = array(
              "ID"=>"sw_service1",
              "Name"=>"sw_service1",
              "Tags"=>array("primary"),
              "Address"=>"10.211.55.17",
              "Port"=>9501,
              "Check"=>array("HTTP"=>"10.211.55.17","Interval"=>"5s")
          );

      $consul = new ConsulToolClass();
      $consul->registerService(json_encode($data)); //往Consul里注册服务
});


// 监听request请求
$http->on('request', function ($request, $response) {
    $response->end('ok');
});


// 开始
$http->start();

注意start事件中的代码,就是调用我们封装好的consul类注册服务方法。

3、如何测试

curl  http://10.211.55.17:8500/v1/agent/services

在开启HttpServer这个swoole服务之前,我们还是在重点执行上面命令来查询consul已经注册了的服务。

然后开启swoole服务:

php httpServer.php

这里写图片描述
这里写图片描述
第一次curl http://10.211.55.17:8500/v1/agent/services查看consul服务里边 是空的{},第二次已经可以看到我们的sw_service1。表示用代码的方式往consul注册我们的swoole服务成功了。

swoole守护进程

https://wiki.swoole.com/wiki/page/278.html

这里写图片描述
前面我们开启一个swoole服务,命令执行之后 会“卡”在那里。
这是因为不是守护进程的方式。
看swoole官网文档,我们知道:守护进程化。设置daemonize => 1时,程序将转入后台作为守护进程运行。长时间运行的服务器端程序必须启用此项

代码设置:

// 配置
$http->set(array('worker_num'=>4,"daemonize"=>1,"log_file"=>"./http_server.log"));

这里写图片描述
最初我们没有使用守护进程的方式来运行swoole服务,要想停掉服务,我们可以在终端里ctrl+c,现在改为守护进程的方式,如何停掉服务呢?

kill 进程id

这里写图片描述

再杀掉httpServer.php这个进程后,Consul去检查发现服务状态已经变为critical。(说明consul检查到我们的服务异常了)

consul如何注销服务

上面我们kill掉httpServer后,我们发现consul中还是可以查看到该服务(只是状态变了),
现在我们需要:httpServer进程结束之后,consul注销掉服务。

我们对consul注销服务的方法熟悉,重点是代码写在哪里?

查看swoole官网文档
https://wiki.swoole.com/wiki/page/19.html
我们可知:服务器关闭后,start函数返回true,并继续向下执行。

所以修改一下我们httpServer.php的代码:

// 开始
$res = $http->start();

if ($res){
     echo "注销服务...".PHP_EOL;
    (new ConsulToolClass())->deregisterService("sw_service1"); // 把consul中相关服务注销
    echo "注销成功".PHP_EOL;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程介绍 【完善体系+精品资料】本课程总计115课时,打造全网最全的微服务体系课程;从微服务是什么、能够做什么开始讲起,绝对零基础入门到精通类型。课程整体脉络十分清晰,每个章节一个知识点,画图+源码+运行讲解,不信你学不会。1、课程先讲解了什么是单体架构、什么是微服务架构、他们之间有什么区别和联系,各自有什么优缺点。2、从本质入手,使用最简单的Spring Boot搭建微服务,让你认清微服务是一种思想和解决问题的手段,而不是新兴技术。3、讲解Spring Boot 与 Spring Cloud 微服务架构之间的联系,原生的RestTemplate工具,以及Actuator监控端点的使用。4、带着微服务所带来的各种优缺点,为大家引入服务发现与注册的概念和原理,从而引入我们的第一个注册中心服务Eureka。5、引入负载均衡的理念,区分什么是服务端负载均衡,什么是客户端负载均衡,进而引入Ribbon负载均衡组件的详细使用。6、为了解决微服务之间复杂的调用,降低代码的复杂度,我们引入了Feign声明式客户端,让你几行代码学习服务的远程调用。7、为了解决服务之间的稳定性,避免发生雪崩问题,我们引入了Hystrix断路器,服务降级和熔断机制。8、微服务集群十分庞大,监控起来是十分困难的,尤其是对每一个接口的熔断情况进行监控,因此我们引入了Turbine微服务监控。9、微服务的调用是杂乱无章的,可以网状调用,怎么做到统一的入口出口,统一的授权、加密、解密、日志过滤,我们引入了第一代网关Zuul。10、微服务的配置分散,每次要修改配置都要重启服务,因此我们引入了Config配置中心。11、跟上主流,Consul是当前主流的服务注册与发现、配置中心一体化的解决方案。12、阿里的Nacos服务注册与发现、配置中心在国内炙手可热,Nacos 经历过双十一的微服务中间件。13、Turbin做微服务监控还是太弱,我们需要更强大,可视化,操作性更强的监控系统,因此我引入了Spring Boot Admin体系。14、Zuul已经停止更新支持,Spring Cloud官方推荐的二代网关Spring Cloud Gateway更加强大。15、微服务的安全架构体系虽然复杂,但是是有学习条例的,什么是认证授权、什么是OAuth2.0的原理、 JWT、怎么样去开发实现。 课程资料 【独家资料】1、课程附带全部63个项目源码,其中Hoxton版本项目源码37个,Edgware版本项目26个,2、230页高清PDF正版课件。3、附带nacos、consul、cmder等视频配套软件。学习方法1、每一节课程均有代码,较好的方式为一边听我的讲解,一边使用我提供的项目代码进行观察和运行。2、课程体系庞大,但是并不杂乱,每个章节只针对一个知识点,减轻学习压力。3、坚持每天学习1~2个章节,可以在地铁、公交上用手机学习。【完善知识体系图】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值