hyperf 2.2.0 微服务 手动创建服务消费者类时报错。
在官网的文档,手动创建消费者类时,它的services.php 推荐配置是这样的。
<?php
return [
// 此处省略了其它同层级的配置
'consumers' => [
[
// 对应消费者类的 $serviceName
'name' => 'CalculatorService',
// 这个消费者要从哪个服务中心获取节点信息,如不配置则不会从服务中心获取节点信息
'registry' => [
'protocol' => 'consul',
'address' => 'http://127.0.0.1:8500',
],
// 如果没有指定上面的 registry 配置,即为直接对指定的节点进行消费,通过下面的 nodes 参数来配置服务提供者的节点信息
'nodes' => [
['host' => '127.0.0.1', 'port' => 9504],
],
]
],
];
后面我看了官网jsonrpc的视频,视频里推荐是这样写的。
<?php
return [
// 此处省略了其它同层级的配置
'consumers' => [
[
// 对应消费者类的 $serviceName
'name' => 'CalculatorService',
// 如果没有指定上面的 registry 配置,即为直接对指定的节点进行消费,通过下面的 nodes 参数来配置服务提供者的节点信息
'nodes' => [
['host' => '127.0.0.1', 'port' => 9504],
],
]
],
];
不知道上面的写法是不是只适用于1.x.x时代?我现在升级到2.2.0时,就是报上面的
[ERROR] Error while injecting dependencies into App\Controller\IndexController: No entry or class found for 'App\Rpc\CalculatorServiceInterface'[101]
折腾了好久,后面发现是services.php配置少了
'service' => \App\Rpc\CalculatorServiceInterface::class,
所以,千万别少了 service ,完整的services.php 是这样
return [
'consumers' => [
[
// name 需与服务提供者的 name 属性相同
'name' => 'CalculatorService',
// 服务接口名,可选,默认值等于 name 配置的值,如果 name 直接定义为接口类则可忽略此行配置,如 name 为字符串则需要配置 service 对应到接口类
'service' => \App\Rpc\CalculatorServiceInterface::class,
// 对应容器对象 ID,可选,默认值等于 service 配置的值,用来定义依赖注入的 key
'id' => \App\Rpc\CalculatorServiceInterface::class,
// 服务提供者的服务协议,可选,默认值为 jsonrpc-http
// 可选 jsonrpc-http jsonrpc jsonrpc-tcp-length-check
'protocol' => 'jsonrpc-http',
// 负载均衡算法,可选,默认值为 random
// 'load_balancer' => 'random',
// 这个消费者要从哪个服务中心获取节点信息,如不配置则不会从服务中心获取节点信息
// 'registry' => [
// 'protocol' => 'consul',
// 'address' => 'http://127.0.0.1:8500',
// ],
// 如果没有指定上面的 registry 配置,即为直接对指定的节点进行消费,通过下面的 nodes 参数来配置服务提供者的节点信息
'nodes' => [
['host' => '127.0.0.1', 'port' => 9504],
],
]
],
];
后面再运行,跑通了