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

栏目: PHP · 发布时间: 7年前

内容简介:修改php.ini文件 添加以mac为例:参考链接 https://www.jianshu.com/p/f8b789280df4

参考文档列表

  • 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<string, string> 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<string, string> 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());

源码: go-grpc-getway


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

使用HTML5和Node构建超媒体API

使用HTML5和Node构建超媒体API

【美】Mike Amundsen(麦克.阿蒙森) / 臧秀涛 / 电子工业出版社 / 2014-5 / 55.00元

《使用HTML5和Node构建超媒体API》探讨了超媒体API 的设计,介绍了作为超媒体API 的构件块的超媒体因子,并讲解了基本格式、状态转移、领域风格和应用流程这4 种超媒体设计元素;之后作者结合具体的场景,通过3个动手实验章节,从超媒体因子和超媒体设计元素入手,用实际的代码向我们详细地演示了超媒体API 的设计;最后介绍了超媒体设计的文档编写、注册与发布等内容。 《使用HTML5和No......一起来看看 《使用HTML5和Node构建超媒体API》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换