带你轻松使用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 协议》,转载必须注明作者和本文链接
from crayxn github.com/crayxn
本帖由 MArtian 于 1年前 加精
讨论数量: 6

file

为啥这个出不来

file

上图只是些警告,端口也启动了。

配置文件也装了!

file

难道postman里的grpc需要手动去增加吗?

9个月前 评论
Crayxn (楼主) 9个月前

file

我去可以了,需要在添加文件夹里的指定.proto文件,然后在指定这个文件的上级文件夹就可以了。

file

9个月前 评论

是啊,这一步的问题,现在是异常了

file

然后这一步的方法没出来

file

我在查一查

9个月前 评论
Crayxn (楼主) 9个月前

file

现在路由是存在的

file

但是奇怪,请求方法还是会报错route不存在

file

我在查查

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!