带你轻松使用Hyperf玩转Grpc(四)启动服务(服务反射)
四、启动服务(服务反射)
在上一篇中,我们实现了通过编写proto文件生成代码,并完成服务编写。这个篇章将带大家把服务跑起来,并在postman中完成测试。
1、配置服务
修改 mall-service/config/autoload/server.php 配置文件
...
'servers' => [
[
'name' => 'grpc',
'type' => Server::SERVER_HTTP,
'host' => '0.0.0.0',
'port' => 9502,
'sock_type' => SWOOLE_SOCK_TCP,
'callbacks' => [
Event::ON_REQUEST => [Hyperf\GrpcServer\Server::class, 'onRequest'],
],
]
],
....
2、配置路由
修改 mall-service/config/routes.php 配置文件 加入以下内容
\Crayoon\HyperfGrpc\GrpcHelper::RegisterRoutes(function () {
// 注意服务名称、方法名称需要与proto声明的服务一致
Router::addGroup("/mall.ProductSrv", function () {
Router::post("create", [\App\Controller\ProductSrvController::class, 'create']);
Router::post("getList", [\App\Controller\ProductSrvController::class, 'getList']);
Router::post("getStock", [\App\Controller\ProductSrvController::class, 'getStock']);
Router::post("incStock", [\App\Controller\ProductSrvController::class, 'incStock']);
Router::post("decStock", [\App\Controller\ProductSrvController::class, 'decStock']);
});
});
3、启动
mall-service 项目根目录下执行 php bin/hyperf.php start
看到 [INFO] HTTP Server listening at 0.0.0.0:9502
即启动成功
4、测试(服务反射)
这里使用的是 postman,打开 postman 并创建grpc连接
地址栏中输入我们的服务地址 grpc://127.0.0.1:9502
这个时候点击 使用服务反射 是报错的,默认框架是没提供服务反射功能的哈。这边我们得自行实现,crayoon/hyperf-grpc
插件实现了服务反射,我们先生成配置文件。
在 mall-service 目录下 执行 CTRL+C 停止运行,再执行
php bin/hyperf.php vendor:publish crayoon/hyperf-grpc
我们将在 config/autoload中 看到新增的配置文件。
再次执行 启动命令,再回到 postman 重新点击 Use server reflection 使用反射即可看到服务
在测试环境中 要使用服务反射,需要先确保 config/autoload/grpc.php 中 reflection.enable 是为 true。在生产环境中 可以通过修改环境变量 REFLECTION_ENABLE=false 关闭服务反射。
最后我们试一下,完成的服务是否可用吧。
点击 Generate Example Message 即可创建请求结构体,修改一下,再点击 Invoke 即可发起请求。
本作品采用《CC 协议》,转载必须注明作者和本文链接
为啥这个出不来
上图只是些警告,端口也启动了。
配置文件也装了!
难道postman里的grpc需要手动去增加吗?
我去可以了,需要在添加文件夹里的指定.proto文件,然后在指定这个文件的上级文件夹就可以了。
是啊,这一步的问题,现在是异常了
然后这一步的方法没出来
我在查一查
现在路由是存在的
但是奇怪,请求方法还是会报错route不存在
我在查查
我也出现了grpc服务连上,但是反射没找到方法