admin管理员组文章数量:1794759
SpringCloud Alibaba 整合 Dubbo 、Nacos 及No provider available from registry报错解决方案
最近给一个mybatis-plus框架的项目整合nacos、Dubbo,经历了No provider available from registry、com.Alibaba.dubbo.rpc.RpcException Failed to invoke the method、java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils等一系列错误,现在把我的创建过程分享一下。
环境:Springboot2.3,Dubbo2.7.8,mybatis-plus,nacosServer1.4.3
由于是在已有项目基础上整合,所以会缺少一部分无关紧要的代码,适合有一定经验的开发者阅读
搭建步骤1. 创建一个公共模块 我这里创建的是dubbo-common,名称自己定 我的项目结构如下: pom.xml引入nacos、dubbo依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!-- 此依赖是为了解决java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils 错误--> <dependency> <groupId>org.apachemons</groupId> <artifactId>commons-lang3</artifactId> </dependency>2.建立提供者(生产者)模块 pom引入对公共模块的依赖:
<dependency> <groupId>com.zhongrui.uthink</groupId> <artifactId>dubbo-common</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency>建立启动类:
@SpringBootApplication @EnableDiscoveryClient @EnableDubbo public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }建立服务实现类:
//引入的接口要和刚才在common建立的一致 import service.huawei.DeviceBindingService; //引入dubboservice import org.apache.dubbo.config.annotation.DubboService; @Service //供dubbo暴露的接口,要指定版本号 @DubboService(version = "1.0.0",group = "db1") public class DeviceBindingServiceImpl extends ServiceImpl<DeviceBindingDao, DeviceBinding> implements DeviceBindingService { //服务实现代码 }applicaiton配置参数(重要) 我的配置:
#提供者的服务名,一定要记住 spring.application.name=userservice #dubbo #协议名为dubbo dubbo.protocol.name=dubbo #端口号,配置为-1代表自增长 dubbo.protocol.port=-1 #配置nacos注册中心地址 dubbo.registry.address=nacos://localhost:8848 #在提供者需要加上这一配置 dubbo.consumer.check=false #设置订阅的服务 dubbo.cloud.subscribed-services=userservice #重要,一定要和注解了DubboService的包目录一致 dubbo.scan.base-packages=com.zhongrui.uthink.business.impl spring.main.allow-bean-definition-overriding=true注:dubbo.scan.base-packages要配置正确,这里的配置比较重要
3. 建立消费者模块 pom引入dubbo-common依赖,与提供者一致
<dependency> <groupId>com.zhongrui.uthink</groupId> <artifactId>dubbo-common</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency>建立消费者实现类:
import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; //这是要调用的接口,和生产者import的一致 import service.huawei.DeviceBindingService; @Service @Slf4j public class PushReceiveServiceImpl { //使用DubboReference注解,括号内的内容要和提供者的一致 @DubboReference(version = "1.0.0",group = "db1") DeviceBindingService bindingService; //其他实现代码... }建立消费者Controller
@RestController @Api(tags = "推送数据接口") @RequestMapping("/receive") public class ReceiveController { @Resource private PushReceiveServiceImpl pushReceiveService; @PostMapping("/test") @ResponseBody @ApiOperation("测试云推送") public ResponseEntity pushReceiverTest(@RequestBody String jsonString) throws Exception { System.out.println(jsonString); return new ResponseEntity(HttpStatus.OK); } }配置文件:
#消费者名称 spring.application.name=huaweiservice #dubbo dubbo.protocol.name=dubbo dubbo.protocol.port=-1 dubbo.registry.address=nacos://localhost:8848 #订阅服务的名称,要和提供者的应用名一致 dubbo.cloud.subscribed-services=userservice4.先后启动提供者、消费者服务 启动提供者服务之后,再启动消费者服务。 最后应在nacos-server看到provider和consumer的名称,如下图所示: (我这里有其它的服务,没有在代码中体现出来)
注意,consumer和provider后面的名称需要完全一致,否则会出现No provider available from registry的错误。 如果没有发现注册的providers服务,请检查@DubboService注解是否正确标明,以及dubbo.scan.base-packages是否配置正确
4.调用测试 在浏览器访问测试消费者模块提供的接口: 如上图所示,返回200,表成功访问。
5.常见问题
这样来避免wrapper的直接传输。
第一次接触Dubbo,如有不对,请多指教
本文标签: 报错解决方案dubboAlibabaSpringCloud
版权声明:本文标题:SpringCloud Alibaba 整合 Dubbo 、Nacos 及No provider available from registry报错解决方案 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686992723a126376.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论