grpc for php,GO-Grpc微服务开发四 服务调用for php

本文详细介绍了如何在PHP环境中配置gRPC扩展,包括安装protoc命令、生成PHP服务端和客户端代码,并提供了PHP客户端调用微服务的示例。通过composer安装必要的SDK,使用protobuf文件定义服务接口,最后展示了如何连接并调用服务端的方法。
摘要由CSDN通过智能技术生成

参考文档列表

PHP grpc官方文档 https://grpc.io/docs/quickstart/php.html

PHP grpc官方案例 https://grpc.io/docs/tutorials/basic/php.html

PHP grpc官方案例之github下载 https://github.com/grpc/grpc/tree/master/examples/php

一.环境搭建

1.安装grpc扩展

pecl install grpc

修改php.ini文件 添加 extension=grpc.so

通过 php -m | grep grpc

查看grpc.so是否安装成功

2.下载protoc命令

以mac为例:参考链接 https://www.jianshu.com/p/f8b789280df4

protoc --version

查看是否安装成功

3.安装PHP GRpc SDK

git clone -b v1.15.0 https://github.com/grpc/grpc

需要grpc-php-plugin来生成proto对应的 php 可执行文件。

cd grpc && git submodule update --init && make grpc_php_plugin

可与将 grpc_php_plugin 命令加入环境变量

二.通过protoc文件生成 PHP 文件

编写proto文件

syntax = "proto3";

package yunpian;

service YunPian {

rpc Send(SendSmsReq) returns (SendSmsRes);

}

message SendSmsReq {

string code = 1;

}

message SendSmsRes {

int32 code = 1;

string message = 2;

map data = 3;

}

protoc命令生成PHP文件

参考链接: https://www.cnblogs.com/ghj1976/p/5435565.html

protoc --proto_path=examples/protos --php_out=examples/php/route_guide --grpc_out=examples/php/route_guide

--plugin=protoc-gen-grpc=bins/opt/grpc_php_plugin ./examples/protos/route_guide.proto

proto_path对应proto文件的位置,php_out指定生成PHP文件的目录,grpc_out和php_out指定相同的目录,plugin对应上面安装的grpc_php_plugin命令路径,最后跟上具体proto的文件地址。

三.PHP客户端调用微服务 例子1

proto文件编辑

syntax = "proto3";

package yunpian;

service YunPian {

rpc Send(SendSmsReq) returns (SendSmsRes);

}

message SendSmsReq {

string code = 1;

}

message SendSmsRes {

int32 code = 1;

string message = 2;

map data = 3;

}

通过protoc命令生成PHP文件

protoc --proto_path=examples/protos --php_out=examples/php/route_guide --grpc_out=examples/php/route_guide

--plugin=protoc-gen-grpc=bins/opt/grpc_php_plugin ./examples/protos/route_guide.proto

通过composer安装consule-php-sdk等包

"require": {

"grpc/grpc": "^v1.3.0",

"google/protobuf": "^v3.3.0",

"sensiolabs/consul-php-sdk": "^3.0"

},

require dirname(__FILE__).'/../vendor/autoload.php';

define('COORD_FACTOR', 1e7);

$serviceFactory = new SensioLabs\Consul\ServiceFactory();

$cl = $serviceFactory->get("catalog"); //采用cataLog的服务方式

$service = $cl->service("yunpian"); //参数传入和服务端约定的服务名

$microServiceData = \GuzzleHttp\json_decode($service->getBody(), true)[0]; //请求微服务的具体地址

$host = $microServiceData["ServiceAddress"];

$port = $microServiceData["ServicePort"];

$client = new Yunpian\YunPianClient($host.":".$port, [

'credentials' => Grpc\ChannelCredentials::createInsecure(),

]);

$reqObj = new Yunpian\SendSmsReq(); //自定义请求

$reqObj->setCode("1234");

list($data, $status) = $client->Send($reqObj)->wait();

var_dump($data->getCode());

var_dump($data->getMessage());

var_dump($data->getData());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值