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

consul 自动发现与自动注册 目录 一、Consul概述 1、什么是服务注册与发现 2、什么是consul 二、consul 部署 1、建立 Consul 服务 2、查看集群信息 3、通过 http api 获取集群信息 三、registrator服务器 1、安装 Gliderlabs/Registrator 2、测试服务发现功能是否正常 3、验证 http 和 nginx 服务是否注册到 consul 四、consul-template 1、准备 template nginx 模板文件 4、配置并启动 te 阅读详情

编码方式向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;
}
consul服务注册与发现、服务配置与刷新 为什么要用服务注册?为什么要用consul不用eureka? 阅读详情

相关推荐

Arduino for ESP32-----ESP-NOW介绍及使用

ESP-NOWESP-NOW介绍ESP-NOW支持以下特性ESP-NOW技术也存在以下局限性获取ESP32的MAC地址ESP-NOW单向通信(One-way communication)ESP32单板间的双向通信一对多通信(一发多收)一对多通信(多发一收) ESP-NOW介绍 ESP-NOW是一种由Espressif开发的协议,可以让多个设备在不使用Wi-Fi的情况下相互通信。该协议类似于低功耗的2.4GHz无线连接。设备之间的配对需要在通信之前完成。配对完成后,连接是安全的、点对点的,不需要握手。这意味着

Better_man1的博客 2万+

基于swoole(rpc),consul实现服务的注册与发现

使用原生的swoole实现rpc的调度,并通过consul进行服务的注册与发现

Dear_xq 的博客 1517

新手必看:TwinCAT死活扫不到倍福CX5020?别慌,先检查这3个地方(附静态IP配置)

本文详细介绍了TwinCAT软件无法扫描到倍福CX5020控制器的常见问题及解决方案。从网络连通性检查、系统环境配置到静态IP设置,提供了一套完整的排查流程和优化建议,帮助新手快速解决通信问题,确保设备稳定运行。

weixin_27219587的博客 362

【云原生】Docker容器服务更新与发现之consul

服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决手段是在服务前端负载均衡,这样前端必须要知道所有后端服务的网络位置,并配置在配置文件中。这里就会有几个问题:●如果需要调用后端服务A-N,就需要配置N个服务的网络位置,配置很麻烦●后端服务的网络位置变化,都需要改变每个调用者的配置既然有这些问题,那么服务注册与发现就是解决这些问题的。

qq_62462797的博客 1290

【软路由】旁路由使用配置教程

【软路由】旁路由使用配置教程简介旁路由好处旁路由配置步骤1、修改管理地址网段 简介 我们都知道,软路由一般有两种使用方式,一种是作为承担DHCP分配的主路由,而另一种就是作为不承担DHCP分配功能的旁路由使用。今天就来介绍如何将软路由配置成为旁路由。 旁路由好处 旁路由最大的好处就是它不承担DHCP分配任务,这意味着它的对网络的影响极小。即使突然故障也不会导致整个网络瘫痪。更别提软路由的配置复杂,用户可能还经常修改上面的网络配置,一旦出错就是整个网络瘫痪,如果家中还有其他人使用网络,影响实在是不好。 建议有

博客 4万+

11 CO配置-控制-成本中心会计-定义分割结构(OKES-Define Splitting Structure)

业务背景:定义分割结构 事务码: OKES SPRO路径:SPRO->控制->成本中心会计->实际过账->期末结算->作业分配->划分->定义分割结构 第1步,SPRO路径进入 第2步,选择“新的条目”创建 分割结构 第3步,选择分割结构代码 点击“分割规则”进行下一个界面,点击“新条目”创建 分割结构规则 第4步,点击“为规则选择” 为分割结构规则创建版本并保存 第5步,选择“分配”,点击“新的条目” 输入分割结构分配

4367

php consul架构,手把手教你搭建Swoole微服务(基于consul和simps框架)

## 安装consul`consul`具体的原理这里不做介绍,只需要记得consul中有两个角色,`server`和`client`,我们首先需要一个consul的`server`集群,生产环境推荐3台机器以上的consul集群保证高可用,server集群间采用`raft`强一致性算法协调,`client`是性能很高的轻量级进程,client和server集群间通过`gossip`协议同步数据,我...

weixin_34287049的博客 754

【电磁场与电磁波课程设计】基于HFSS的双频微带天线仿真及设计

第五代移动通信技术(5G)的商用已经近在眼前,作为移动通信中最为重要的功能组件,面向5G通信应用的手机天线与基站天线的技术研究与设计成为近年来的热点。随着移动通信中“跳频”“扩频”等通信技术发展,为了满足与多个终端的通信要求,实现多系统共用和收发共用等功能,这就要求天线在不同频段下工作。根据国家工信部的最新规定,5G移动通信的中频段被划定在3.3 GHz-3.5 GHz及4.8 GHz-5.0 GH,面向5G移动通信的天线应具有高增益、小型化、宽频段及高隔离度等技术特征,以满足5G通信的高传输速率、波束智能

weixin_44450575的博客 1万+

如何使用Consul进行服务注册与发现?

Consul 是由 HashiCorp 开发的一款开源工具,用于实现分布式系统的服务发现与配置。它支持跨多个数据中心的所有节点的健康检查、键值存储、多服务的发现和配置。

Pmyx_wyh的博客 911

Simpack实战:5分钟搞定轨道车辆车轮不圆的3种定义方法(附详细参数设置)

本文详细介绍了在Simpack中定义轨道车辆车轮不圆的3种高效方法:Radius deviations、Fourier coefficients和Harmonic function,并提供了详细的参数设置指南。通过实战案例和参数优化技巧,帮助工程师快速掌握车轮不圆度的定义与仿真,提升轨道车辆动力学分析的准确性和效率。

weixin_29292535的博客 201

手把手教你用PLECS仿真BUCK数字电源(含DSP代码实现)

本文详细介绍了如何利用PLECS仿真软件与Visual Studio 2022搭建高保真数字电源开发环境,手把手指导从BUCK电路建模、编写硬件感知的C控制算法到参数调优的全过程。重点阐述了通过DLL接口实现软件在环仿真,模拟DSP的ADC/PWM时序,并将验证后的代码无缝迁移至TI C2000系列DSP,构建从仿真到固件的完整数字电源开发闭环,显著提升开发效率与一次成功率。

oo7890的博客 394

四、Consul服务注册与发现

a、consul官网地址(Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。它具有很多优点。包括: 基于 raft 协议,比较简洁;

sinat_31583645的博客 2327

解决linux 2.5G网卡驱动问题

解决linux 2.5G网卡驱动问题 关键词:2.5G网卡驱动,ubuntu,安装,2.5G Ethernet LINUX driver,Realtek网卡驱动 由于2.5G网卡较新,各linux发行版的通用驱动已不适用,新装的系统会出现无法上网问题,由于国内网络环境去Realtek官网很难下载到驱动文件,故本文提供github上的2.5G Ethernet LINUX driver r8125 for kernel up to 5.6的版本驱动文件r8125-9.003.05.tar.bz2各位可以自

poorguy_aos的博客 1万+

Consul 注册中心介绍以及搭建

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其它工具(比如ZooKeeper等),使用起来也较为简单。Consul使用Go语言编写,因此具有天然可移植性(支持Linux,Windows和MacOS);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。......

怪咖@的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Consul服务注册与发现

服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构,起初的解决手段是在服务前端负载均衡,这样前端必须要知道所有后端服务的网络位置,并配置在配置文件中。这里就会有几个问题:●如果需要调用后端服务A-N,就需要配置N个服务的网络位置,配置很麻烦●后端服务的网络位置变化,都需要改变每个调用者的配置既然有这些问题,那么服务注册与发现就是解决这些问题的。

weixin_69148277的博客 2212

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

入门注册中心-consul

Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。

qq_33816243的博客 3724

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Consul服务注册与服务发现机制

1、什么是服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相调用。 举个现实点的例子吧,比如电商系统里的订单服务需要调用库存服务,如下图所示。 现在的问题在于,订单服务在192.168.31.154这台机器上,库存服务在192.137.1.33这台机器上。 现在订单服务是想要调用库存服务,但是他并不知道库存服务在...

u013982921的专栏 7907

Consul坑坑一人行之从入门到放弃,记Consul的重复注册、节点失效后无健康检查等坑。。。求解...

环境: dotnet core 2.1 CentOS 7 由于听到Eureka2.X最近好像要凉的消息 所以昨天在尝试使用Consul替代Eureka来实现服务发现等功能 Consul使用HttpAPI注册服务 但是!!!! 发现几个非常恶心的地方,在这里分享出来,希望可以得到园子里各位大牛的指导。 坑1:同一个ServiceID 可以在多个节点上重复注...

aoyao7437的博客 1844

consul注册中心入门

consul注册中心入门

ZL1392010的博客 805

Consul服务注册中心

1、Metrics(监控工具):Metrics提供了一个强大的工具包,用于衡量生产环境中关键组件的行为。按照官方的说法Metrics为Jetty、Logback、Log4j、Apache HttpClient、Ehcache、JDBI、Jersey等多个开源库提供支持。2、ACL:Access Control List,是一种网络安全机制,用于限制用户、进程或设备对网络资源的访问权限。(Access Control List,是一种网络安全机制,用于限制用户、进程或设备对网络资源的访问权限)

weixin_39941298的博客 1389

consul(服务注册与发现,服务配置与动态刷新)

consul(服务注册与发现,服务配置与动态刷新)

weixin_53273714的博客 2321

Consul服务注册用法

下载完成之后只有一个exe文件,在该目录下使用consul agent -dev命令运行,或者配置环境变量可以直接运行。

m0_64589497的博客 816

php架构之consul通信

consul服务注册,发现,服务间的通信协议 不管是php还是java还是go,只要把自己的服务名字注册到consul上,consul就相当于一个通讯录,然后你在php调用的时候会出现n个服务,然后根据你填写的那个服务他在这里面去寻找,找到就通信成功,找不到就是没有find service! consul.josn的配置文件 { "datacenter":"dc1", "...

青春已被放纵了 的博客 5549

Consul服务注册实现-Swoft框架

环境准备 Swoft框架 参见:Swoft入门及技术指南https://blog.youkuaiyun.com/yan_dk/article/details/90228563 Consul 参见:Consul入门及技术指南https://blog.youkuaiyun.com/yan_dk/article/details/91488680 Swoft框架实现Consul服务注册 需求分析:我们...

yan_dk的专栏 2339
上一篇: Consul介绍
下一篇: 安装docker、下载镜像、运行php容器
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值