Error while injecting dependencies into App\Controller\IndexController: No entry or class found for

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],
            ],
        ]
    ],
];

后面再运行,跑通了

 

### 回答1: ven.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (ORA-28040: No matching authentication protocol) 这个错误是由于数据库连接池无法创建可池化的连接工厂,原因是数据库中没有匹配的身份验证协议。可能是数据库版本过低或者连接字符串中的身份验证协议不正确。需要检查数据库版本和连接字符串,确保它们匹配并正确配置。 ### 回答2: Error injecting: org.apache.ma这个错误一般是因为应用程序在启动或运行过程中,无法将所需的依赖项注入到相应的类中导致的。这个错误有多种可能性,下面列出其中几种常见的原因: 1. Maven 依赖库版本不兼容:可能是因为你的项目依赖了 Maven 库的不兼容版本,这会导致类库无法正常加载和注入依赖项。这时需要检查你项目中的依赖库,尝试使用较新的版本或尝试去掉不必要的依赖库。 2. 项目代码缺少依赖注入注释:依赖注入是一种通过注释和配置文件来完成的技术,如果你的项目中缺少相关的注释或配置文件,就会出现无法注入依赖项的错误。需要检查你的代码中是否存在缺失的注释或配置文件。 3. Spring 配置文件错误:Spring 是常用的 Java 开发框架之一,其 IOC 和 AOP 特性依赖于配置文件的正确性。如果你的 Spring 配置文件出现错误,就会导致无法正常注入依赖项。需要检查你的 Spring 配置文件是否存在错误,并尝试修复。 4. 类路径错误:类路径是指 JVM 加载类文件的路径,如果类路径设置错误,就会导致无法加载和注入依赖项的错误。需要检查你的类路径设置是否正确,并尝试修复。 5. 编译器版本兼容性问题:如果你的项目代码使用了不兼容的编译器版本,就会导致无法加载和注入依赖项的错误。需要检查你的项目使用的编译器版本是否适合目标运行环境,并尝试更换编译器版本。 综上所述,Error injecting: org.apache.ma错误可能是由多种原因导致的。需要排查具体原因并根据实际情况来进行相应的修复。 ### 回答3: 首先,让我们来了解一下“error injecting: org.apache.ma”的意思。当您尝试运行或部署一个应用程序或项目时,如果系统报错“error injecting: org.apache.ma”,这意味着其中的注入过程出现了某些错误。 注入是指将一个类的实例或字段插入到另一个类中。在Java编程中,注入通常用于依赖注入(DI)框架,如Spring等,以处理不同的服务或组件之间的依赖关系。此外,在Java EE中,注入常用于管理不同类型的资源,例如数据源、EJB等。 现在,我们来看一下可能导致“error injecting: org.apache.ma”的原因和解决方法: 1.依赖项不正确:当应用程序的依赖项无法满足注入的类型时,就会出现注入错误。在这种情况下,您需要检查依赖项是否正确设置和导入。 2.未正确配置注入器:另一个可能导致注入错误的原因是未正确配置注入器。这包括配置文件中的设置和注入器的参数配置。在这种情况下,您需要仔细查看配置文件和注入器设置,并确保它们符合正确的规范。 3.重复的注入:有时,可能会存在重复的注入,这会导致注入失败。在这种情况下,您需要检查是否存在多个相同类型的注入,并将其删除。 4.冲突的注入:有时,当您尝试注入两个有相同名称或相同类型的类时,也会出现注入错误。解决方法是在注入时使用一个唯一的名称或类型。 5.版本不匹配:当注入的类和使用的框架或库之间的版本不兼容时,也可能会出现注入错误。在这种情况下,您需要确保所有的库和框架都与注入的类兼容。 总之,“error injecting: org.apache.ma”可能会发生在应用程序或项目中的注入过程中,主要是由于依赖项不正确、注入器未正确配置、重复或冲突注入、版本不匹等原因。解决方法是检查这些问题,并根据实际情况进行更改和修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值