Laravel整合gRPC
近需要用Laravel实现一个Rest的API,后端调用Golang的RPC服务,记录一下整合的过程。
环境准备
php安装grpc和protobuf扩展
pecl install grpc
pecl install protobuf
找到php.ini文件,添加下面两行:
extension=grpc.so
extension=protobuf.so
clone一个grpc的repo
git clone https://github.com/grpc/grpc.git
假设目录在/home/aaa/下面
安装protobuf
apt install protobuf
准备proto文件
文件名:userrpc.proto,内容如下
syntax = "proto3";
package App.UserRpc;
service User{
rpc UserLogin(LoginInfo) returns (UserInfo) {}
}
message LoginInfo{
string loginname= 1;
string password= 2;
}
message UserInfo{
int32 code= 1;
string err_msg= 2;
string token= 3;
int32 userid= 4;
string username= 5;
}
其中定义了两种消息结构和一个rpc服务。
生成PHP的gRPC客户端代码
在user.proto文件的所在目录,执行下面的命令:
protoc --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=/home/aaa/grpc/bins/opt/grpc_php_plugin user.proto
1
如果没问题的话,应该会生成两个目录:App和GPBMetadata
拷贝文件
把App下面的UserRpc目录拷贝到laravel的app/下,把GPBMetadata目录拷贝到和app同级的目录。
设置composer
打开laravel的composer.json文件,在classmap下添加一行:
GPBMetadata
执行下面的命令:
composer require "grpc/grpc"
然后执行:
composer dump-autoload
编写Controller
现在可以去写一个laravel的controller试试了。
public function login(Request $request){
$loginname = $request->input("loginname");
$password = (string)$request->input("password");
$userrpc = new \App\UserRpc\UserClient("127.0.0.1:50052",[
'credentials' => \Grpc\ChannelCredentials::createInsecure()
]);
$request = new \App\UserRpc\LoginInfo();
$request->setLoginname($loginname);
$request->setPassword($password);
list($recv,$status) = $userrpc->UserLogin($request)->wait();
$code = $recv->getCode();
echo $code;
exit;
}
相关文章
- Spring - Netty (整合)
- VMWare9下基于Ubuntu12.10搭建Hadoop-1.2.1集群—整合Zookeeper和Hbase
- 分布式系列教程(03) -分布式Redis缓存(SpringBoot整合Redis)
- SpringBoot+Dubbo项目整合搭建
- 一文看懂Spring Boot整合Rabbit MQ实现多种模式的生产和消费
- idea实现spring + springMVC + mybatis 整合(1)
- SpringBoot整合RabbitMq(二)
- Nacos整合Spring Boot Admin
- ssh2 三大框架整合
- springCloud zookeeper整合,Java Zookeeper微服务注册中心整合
- SwiftUI Core Data 如何整合到历史项目里面
- springboot学习之七(整合spring swagger)
- git零基础快速入门实战,重点讲解,在实际生产中整合idea对版本、分支的管理等
- 中兴通讯力推轨道信息化战略,加强5G垂直行业整合
- IaaS市场大整合:云用户喜忧参半
- 【心情分享】物联网整合车位
- SpringBoot 整合实现RabbitMQ
- SpringBoot开发案例之整合Dubbo提供者(一)
- 全栈开发实战|SSM框架整合开发
- SpringBoot整合Quartz
- jquery.js和jquery.min.js的区别和springboot整合echarts.min.js
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件+SpringBoot整合Mybatis-plus