spring-cloud-alibaba-dubbo踩坑记
在https://start.aliyun.com/bootstrap.html下载了示例程序,用的版本如下:
spring-boot:2.3.7.RELEASE
spring-cloud-alibaba:2.2.2.RELEASE
spring-cloud-alibaba-dubbo:2.2.2.RELEASE
发现有很多坑:
【No provider available from registry localhost:9090 for service】
使用默认的dubbo.registry.address配置,会一直报这个错误,看github的讨论,这个一直以来都有兼容性问题,现在也还未很好的解决。
但可以通过以下配置进行处理:
dubbo.registry.address=nacos://127.0.0.1:8848
dubbo.registry.group=dubbo
dubbo.config-center.group=dubbo
但这样的配置,nacos会多出一些service:

而且必须是服务提供者先启动,不然服务消费者就会报错启动不了。
后期我尝试使用dubbo-admin 配置nacos,可以看到服务列表,但却看不到元数据,尝试了各种办法也未解决。
admin.registry.address=nacos://127.0.0.1:8848?group=dubbo&namespace=public
admin.config-center=nacos://127.0.0.1:8848?group=dubbo
admin.metadata-report.address=nacos://127.0.0.1:8848?group=dubbo


最后是换了nacos版本解决了,之前用的是2.0.3,用最新的2.1.0就显示元数据了。

但dubbo-admin启动后,服务提供者跟服务消费者一直会报如下错误:
java.lang.IllegalArgumentException: Service not found:com.alibaba.cloud.dubbo.service.DubboMetadataService, getMetadataInfo。
这个或许是spring-cloud-alibaba-dubbo跟dubbo-admin不兼容的原因,因为spring-cloud-alibaba-dubbo是将DubboMetadataService作为服务信息,
但dubbo-admin是将MetadataService作为服务信息,,dubbo-admin调用远程的DubboMetadataService时候报错,因为DubboMetadataService没有getMetadataInfo方法。
另外版本对应也很重要,spring-cloud-alibaba-dubbo使用的dubbo版本是2.7.8(MetadataService没有getMetadataInfo方法),dubbo-admin使用的是dubbo版本是3.0.2.1(MetadataService有getMetadataInfo方法)!
最后看到了这样一个帖子,说是spring-cloud-alibaba-dubbo还有一些问题,希望从spring-cloud-alibaba移除,期待后续能处理好。
https://github.com/alibaba/spring-cloud-alibaba/issues/2398
目前最新版的spring-cloud-alibaba已经spring-cloud-alibaba-dubbo移除了,所以想继续使用dubbo服务的,可以使用spring boot跟原生dubbo。
可以参考【例子中,dubbo的版本我用的是3.0.9】:
https://github.com/apache/dubbo/tree/3.0/dubbo-demo/dubbo-demo-spring-boot
https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-boot-example
在过程中发现这样一个有趣的问题,就是单纯的服务消费者工程【没有暴露服务】未作为一个服务注册到nacos。
如果是服务提供者,不仅仅会把服务注册到nacos,也会把工程作为一个服务注册到nacos。
这里看了源码才知道,在ServiceInstanceHostPortCustomizer的customize方法中,如果有工程中有暴露服务,会设置工程服务实例的端口以及host信息,
在AbstractServiceDiscovery类的register方法中就有判断是否一个有效【设置了host跟端口】的服务实例,是的话就会把工程作为一个服务注册到nacos。
所以这也就解释了为什么单纯的服务消费者不会注册到nacos,以为它没有暴露服务,就不会设置工程实例的端口以及host信息,就不是一个有效的服务,所以不会进行注册。
也可以解释为什么dubbo-admin需要暴露一个MockService服务,这样可以把dubbo-admin工程也作为一个服务注册到nacos,dubbo-admin使用的dubbo版本是3.0.2.1,
可以看DubboBootstrap类的doStart()方法,也是根据是否有暴露服务来决定是否将工程作为一个服务注册到nacos,跟demo例子的版本【3.0.9】不一样,但是道理一样。
spring-cloud-alibaba-dubbo踩坑记的更多相关文章
- Spring Cloud Alibaba系列之分布式服务组件Dubbo
本博客的例子代码可以在github找到下载链接:代码下载 SpringBoot.SpringCloud Alibaba系列博客专栏:链接 1.分布式理论 1.1.分布式基本定义 <分布式系统原理 ...
- Spring Cloud Alibaba到底坑不坑?
之前我发过一篇<说说我为什么看好Spring Cloud Alibaba>,然后这两天有网友给我转了这篇文章<坑爹项目spring-cloud-alibaba,我们也来一个>, ...
- Spring Cloud Alibaba
Spring Cloud Alibaba Dubbo Dubbo Dubbo 系列 [Dubbo 系列总结] [Dubbo 系列(01)最简使用姿态] [Dubbo 系列(02)整体架构] Dubbo ...
- 厉害了,Spring Cloud Alibaba 发布 GA 版本!
? 小马哥 & Josh Long ? 喜欢写一首诗一般的代码,更喜欢和你共同 code review,英雄的相惜,犹如时间沉淀下来的对话,历久方弥新. 相见如故,@杭州. 4 月 18 日, ...
- Spring Cloud Alibaba发布第二个版本,Spring 发来贺电
还是熟悉的面孔,还是熟悉的味道,不同的是,这次的配方升级了. 今年10月底,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cl ...
- Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了
阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版.Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架, ...
- Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合
@ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...
- 记一次 Spring 事务配置踩坑记
记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ...
- Spring @Transactional踩坑记
@Transactional踩坑记 总述 Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务 ...
- Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」
很早以前,在刚开始搞Spring Cloud基础教程的时候,写过这样一篇文章:<微服务架构的基础框架选择:Spring Cloud还是Dubbo?>,可能不少读者也都看过.之后也就一直有关 ...
随机推荐
- 安装pytorch报错 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
windos安装,报错如下 看了不少回答,大概是缓存和内存满了 我的C盘只给了70G,然后意外发现只剩下3G多了,先用系统自带的清理工具清理了一下,然后腾讯电脑管家"工具箱"中的& ...
- org.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active解决办法
解决办法 在配置elasticsearch.yml中加上 ingest.geoip.downloader.enabled: false
- SpringBoot启动失败问题
SpringBoot启动失败问题 一.现象 pom.xml没有显示报错,也能查看到各种需要的依赖jar包,但在启动时显示 二.原因 网络不好导致maven导包失败或者导包不完整 三.解决办法 进入项目 ...
- springboot AOP配置
在Springboot中添加AOP配置分两步: 最近学习AOP ,记录一下,虽然很多名字不太清楚,但是问题不大 1:在pom.xml中添加AOP依赖 2:建一个AOP配置类 下面来看下代码是怎么实现的 ...
- netstate查找端口占用
netstat -nao 列出本机端口占用信息加上|findstr 筛选 各个字段的意思: 协议 本地地址:端口 外部地址:端口 状态 PID 这 ...
- PyCharm如何实现控制台换行显示
举个例子 我现在想要看输出结果的所有数据然后再控制台输出的信息如下: 本来输出的内容有很多,但由于只显示了一行,因此想要看全部的内容还需要拖拉滚动条,挺麻烦的,而且看着也不方便,怎么让控制台信息全都直 ...
- 设计模式,mvc,mvp,mvvm
mvc model模型-视图view-控制器controller 视图可以直接访问模型,所以视图里面包括模型信息,mvc关注的是模型不变,所以在mvc中,模型不依赖视图,但是view是依赖model的 ...
- Qt设置程序图标
修改.pro文件添加一下代码:要求.pro文件和.ico文件在同一文件夹下 RC_ICONS = xxx.ico (你的程序图标)最后重新构建一次即可
- sxt_(015)_request处理表单数据及乱码
一.request处理表单数据及乱码 1.1 处理单个表单数据用request.getParameter("x"); 1.2 处理多个表单(checkbox.select)数据用r ...
- 二、chaosblade实现k8s集群操作
1.执行 Kubernetes 实验场景,需要提前部署 ChaosBlade Operator,Helm 安装包下载地址 https://github.com/chaosblade-io/chaosb ...