您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > php

php如何搭建微服务

时间:2019-10-11 14:11:21  来源:  作者:

Hyperf (推荐学习:php视频教程)

对于 JAVA 开发者来说,有技术相当成熟的微服务框架可供选择:

[Dubbo](https://dubbo.Apache.org/zh-cn/)

[Spring Cloud](https://www.springcloud.cc/)

作为一名 PHPer,我用 google 查了一下「PHP + 微服务」,发现有用的相关内容少之又少 ,没有什么实质性的参考价值,无限惆怅。

幸好,有大神在基于 Swoole 扩展的基础上,实现了高性能、高灵活性的 PHP 协程框架 [Hyperf](https://www.hyperf.io/) ,并提供了微服务架构的相关组件。

Hyperf 是基于 `Swoole 4.3+` 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 `PHP-FPM` 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 [PSR 标准](https://www.php-fig.org/psr) 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 `可替换` 与 `可复用` 的。

于是,我在学习了微服务架构相关的基础知识之后,使用 Hyperf 框架构建了一个基于 PHP 的微服务集群,这是项目源码地址:

https://github.com/Jochen-z/php-microservice-demo

该项目使用 Dokcer 搭建,`Docker-compose.yml` 代码如下:

version:"3"

services:

consul-server- leader:

image:consul:latest

container_name:consul-server-leader

command:"agent -server -bootstrap -ui -node=consul-server-leader -client=0.0.0.0"

environment:

- CONSUL_BIND_INTERFACE=eth 0

ports:

- "8500:8500"

networks:

- microservice

microservice- 1:

build:

context:.

container_name:"microservice-1"

command:"php bin/hyperf.php start"

depends_on:

- "consul-server-leader"

volumes:

- ./www/microservice- 1:/var/www

networks:

- microservice

tty:true

microservice- 2:

build:

context:.

container_name:"microservice-2"

command:"php bin/hyperf.php start"

depends_on:

- "consul-server-leader"

volumes:

- ./www/microservice- 2:/var/www

networks:

- microservice

tty:true

App:

build:

context:.

container_name:"app"

command:"php bin/hyperf.php start"

depends_on:

- "microservice-1"

volumes:

- ./www/ web:/var/www

ports:

- "9501:9501"

networks:

- microservice

tty:true

networks:

microservice:

driver:bridge

volumes:

microservice:

driver:local

这里启动了一个 Consul 容器 `consul-server-leader` 作为服务注册和服务发现的组件,容器 `microservice-1` 和 `microservice-2` 分别提供了加法运算和除法运算的服务。

容器 `app` 作为服务调用方,配置了 `consul-server-leader` 容器的 URL,通过访问 `consul-server-leader` 获取 `microservice-1` 和 `microservice-2` 服务的 IP 地址和端口,然后 `app` 通过 RPC 协议调用加法运算和除法运算的服务获取结果并返回给用户。

`app` 容器为 Web 应用,部署了一个 Hyperf 项目并对外提供 HTTP 服务。

例如,在 `AppControllerIndexController` 控制器里有 `add` 方法:

publicfunctionadd(AdditionService $addition)

{

$a = (int) $this->request->input( 'a', 1); # 接受前端用户参数

$b = (int) $this->request->input( 'b', 2);

return[

'a'=> $a,

'b'=> $b,

'add'=> $addition->add($a, $b) # RPC调用

];

}

在 `AppJsonRpcAdditionService` 中 `add` 的实现:

classAdditionServiceextendsAbstractServiceClient

{

/**

* 定义对应服务提供者的服务名称

* @varstring

*/

protected$serviceName = 'AdditionService';

/**

* 定义对应服务提供者的服务协议

* @varstring

*/

protected$protocol = 'jsonrpc-http';

publicfunctionadd(int $a, int $b): int

{

return$this->__request( __FUNCTION__, compact( 'a', 'b'));

}

}

继承了 `AbstractServiceClient` 即可创建一个微服务客户端请求类,Hyperf 在底层帮我们实现了与 Consul 和服务提供者交互的细节,我们只要 `AdditionService` 类里的 `add` 方法即可远程调用 `microservice-1` 和 `microservice-2` 提供的服务。

至此,PHP 微服务集群搭建就完成了!

以上就是php如何搭建微服务的详细内容,更多请关注其它相关文章!



Tags:php 微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
随着互联网浏览越来越大. 传统的 MVC 单一架构随着应用规模的不断扩大,应用模块不断增加,整个应用也显得越来越臃肿,维护起来也更加困难.我们必须采取措施,按应用拆分,就是把原...【详细内容】
2020-08-31  Tags: php 微服务  点击:(72)  评论:(0)  加入收藏
Hyperf (推荐学习:PHP视频教程)对于 Java 开发者来说,有技术相当成熟的微服务框架可供选择:[Dubbo](https://dubbo.apache.org/zh-cn/)[Spring Cloud](https://www.springcloud.c...【详细内容】
2019-10-11  Tags: php 微服务  点击:(157)  评论:(0)  加入收藏
微服务微服务架构是一项在云中部署应用和服务的新技术。市面上比较常见的微服务架构基本都是基于Java+spring。自从有了swoole扩展,PHP也适合做微服务架构,今天我们就来看看PH...【详细内容】
2019-08-21  Tags: php 微服务  点击:(379)  评论:(0)  加入收藏
▌简易百科推荐
序言:前段时间织梦因为版权的问题在网上闹得沸沸扬扬,也提醒了众多开发者选择cms上应该谨慎使用,今天给大家展示一款自己搭建的内容管理系统,不用担心版权的问题,而且非常容易维...【详细内容】
2021-11-30  小程序软件开发    Tags:管理系统   点击:(34)  评论:(0)  加入收藏
准备安装包(PHP: Hypertext Preprocessor)下载安装包以及组件wget https://www.php.net/distributions/php-8.0.0.tar.bz2wget https://github.com/phpredis/phpredis/archive...【详细内容】
2021-11-09  mimic96    Tags:PHP   点击:(40)  评论:(0)  加入收藏
golang context 很好用,就使用php实现了github地址 : https://github.com/qq1060656096/php-go-context context使用闭坑指南1. 将一个Context参数作为第一个参数传递给传入和...【详细内容】
2021-11-05  1060656096    Tags:PHP   点击:(41)  评论:(0)  加入收藏
一段数组为例:$list = array:4 [ 0 => array:7 [ "id" => 56 "mer_id" => 7 "order_id" => "wx163265961408769974" "is_postage" => 0 "store_name" => "奇...【详细内容】
2021-09-29  七七小影视    Tags:PHP   点击:(65)  评论:(0)  加入收藏
利用JS的CryptoJS 3.x和PHP的openssl_encrypt,openssl_decrypt实现AES对称加密解密,由于需要两种语言对同一字符串的操作,而CryptoJS 的默认加密方式为“aes-256-cbc”,PHP端也...【详细内容】
2021-09-16  李老师tome    Tags:对称加密   点击:(79)  评论:(0)  加入收藏
1、checkdate()验证格利高里日期即:日期是否存在。checkdate(month,day,year);month必需。一个从 1 到 12 的数字,规定月。day必需。一个从 1 到 31 的数字,规定日。year必需。...【详细内容】
2021-08-31  七七小影视    Tags:时间函数   点击:(80)  评论:(0)  加入收藏
对于各类开发语言来说,整数都有一个最大的位数,如果超过位数就无法显示或者操作了。其实,这也是一种精度越界之后产生的精度丢失问题。在我们的 PHP 代码中,最大的整数非常大,我...【详细内容】
2021-08-26  硬核项目经理    Tags:PHP   点击:(83)  评论:(0)  加入收藏
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门。今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总。上文说过,物理结构是用于确定数据以何种方式存...【详细内容】
2021-07-19  硬核项目经理    Tags:线性表   点击:(94)  评论:(0)  加入收藏
一、开启IIS全部功能。二、部署PHP1.官网下载并解压PHP: https://windows.php.net/downloads/releases/2.将php.ini-development文件改为php.ini3.修改php.ini(1)去掉注释,并修...【详细内容】
2021-07-15  炘蓝火诗  今日头条  Tags:PHP环境   点击:(129)  评论:(0)  加入收藏
一、环境说明本文中使用本地VM虚机部署测试。OS:CentOS Linux release 7.8.2003 (Core)虚机配置:2核CPU、4G内存①系统为CentOS 7.8 x64最小化安装,部署前已完成系统初始化、...【详细内容】
2021-06-25  IT运维笔记  今日头条  Tags:PHP8.0.7   点击:(141)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条