热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

##安装consulconsul具体的原理这里不做介绍,只需要记得consul中有两个角色,server和client,我们首先需要一个c

## 安装consul

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

`rpc调用端`通过请求本机的consul`client`来`发现服务`。

`rpc服务端`通过请求本机的consul`client`来`注册服务`。

这里推荐采用docker来安装`consul`。

#### consul server集群安装

```bash

一. docker pull consul

#CONSUL_BIND_INTERFACE 是内网的网卡名,consul服务将绑定到这个网卡上

#server=true 表示这个consul进程是server角色

#bootstrap-expect=1 表示只需要1个server就可以对外提供服务,推荐3个,我这里为了演示写1

二. docker run -d --name=consul1 --net=host -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=true --bootstrap-expect=1 --client=0.0.0.0 -ui

```

#### 在rpc的客户端和服务端安装consul client

```bash

一. docker pull consul

#server=false 表示这是个client进程

#join=192.168.2.132,这个ip是consul server那台机器的ip,由于server是集群部署,即使这个ip机器宕机,也会自动选主到新ip

二. docker run -d --name=client --net=host -e CONSUL_BIND_INTERFACE=eth0 consul agent --server=false --client=0.0.0.0 -ui -join=192.168.2.132

```

## 安装simps的rpc组件

首先安装swoole扩展,[参考此文档](https://wiki.swoole.com/#/environment)

安装simps脚手架和rpc组件

```php

composer create-project simple-swoole/skeleton

cd skeleton

composer require simple-swoole/rpc-multiplex

```

`rpc-multiplex`组件采用单连接复用的方式,不需要连接池,性能极高,感谢`@李铭昕`小伙伴的贡献。

## 添加rpc服务端代码

在`app/Service`目录下面,填充你的业务代码

```php

namespace App\Service;

class RpcService

{

public function hello(string $name): string

{

return 'Hello ' . $name;

}

}

```

在`config/routes.php`定义一个`Health`接口给consul探活用

```php

return [

['GET', '/Health', function ($request, $response) {

$response->end('Im ok');//定义健康监测接口给consul调用

}],

];

```

## 修改rpc服务端的配置

修改`config/servers.php`

```php

return [

'main' => [

'class_name' => \Swoole\Http\Server::class,

'ip' => '0.0.0.0',

'port' => 9501,//主服务用来接收consul的心跳请求

'sock_type' => SWOOLE_SOCK_TCP,

'callbacks' => [

'request' => [\App\Events\Http::class, 'onRequest'],

'start' => [Simps\RpcMultiplex\TcpServer::class, 'onStart'],

'workerStart' => [Simps\RpcMultiplex\TcpServer::class, 'onWorkerStart'],

],

'settings' => [

'worker_num' => swoole_cpu_num(),

],

'sub' => [

//定义rpc服务,注册服务到consul

[

'callbacks' => [

"receive" => [Simps\RpcMultiplex\TcpServer::class, 'onReceive'],

],

'port' => 9503,//rpc服务监听9503端口

'sock_type' => SWOOLE_SOCK_TCP,

//注册到consul时候,'0.0.0.0'默认会拿第一块网卡的ip注册到consul

'ip' => '0.0.0.0',

//服务名称

'service_name' => ['rpc1','rpc2'],

//有`consul`配置的时候会自动注册到consul

'consul' => [

'publish_to' => 'http://127.0.0.1:8500', //本机的consul client地址

"checks" => [

[

"name" => "rpc1",

"http" => "http://127.0.0.1:9501/Health", //consul请求这个地址 连通就证明服务可用,checks的更多配置请参考consul官方文档。

"interval" => "5s",

],

[

"name" => "rpc2",

"http" => "http://127.0.0.1:9501/Health", //consul请求这个地址 连通就证明服务可用,checks的更多配置请参考consul官方文档。

"interval" => "5s",

]

]

],

'settings' => [

// 以下参数不允许修改

'open_length_check' => true,

'package_length_type' => 'N',

'package_length_offset' => 0,

'package_body_offset' => 4,

'package_max_length' => 1024 * 1024 * 2,

],

],

]

]

];

```

## 添加rpc调用端代码

```php

class IndexController

{

public function index($request, $response)

{

$serviceName = 'rpc1';

$consulUri = 'http://127.0.0.1:8500';//本机的consul client地址,框架会通过这个consul client找到所有可用的机器,随机找到一台机器进行rpc调用,如果所有机器都挂了会抛异常

$data = CallWithConsul::getInstance($serviceName, $consulUri)->call('App\Service\RpcService', 'hello', 'World'); //call(类名,方法,参数)

$response->end(

json_encode(

[

'method' => $request->server['request_method'],

'message' => 'Hello Simps. ' . $data->getResult(),

]

)

);

}

}

```

## 微服务其他东西

当然微服务是个很大的话题,这里只解决了服务发现和注册,还有服务监控,限流等,监控这里推荐专门针对php的监控产品 [Swoole Tracker](https://business.swoole.com/tracker/index)



推荐阅读
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • k8s进阶之搭建私有镜像仓库
    企业级私有镜像仓 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • Docker下Prometheus和Grafana三部曲之一:极速体验
    开源监控工具Prometheus目前广为使用,配合Grafana即可直观展现监控数据,但对于初学者来说搭建这样一个系统要花费些时间,或者有 ... [详细]
author-avatar
Deenylou2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有