在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】不一样,但是道理一样。

  

  

最新文章

  1. Android系列:res之shape制作
  2. QuickFlow UI 控件之 NamedFormAttachment
  3. Sharif University CTF 2016 - Smooth As Silk
  4. IIS应用程序池最大进程数设置
  5. HDOJ2013蟠桃记
  6. JDBC与javaBean
  7. 关于java socket(转)
  8. Zabbix-agent使用自带模板监控 MySQL
  9. Angular中ngModel的$render的详解
  10. .NET C#到Java没那么难,MVC篇
  11. jmeter入门系列文章二 版本号介绍
  12. iometer测试工具
  13. 《Java大学教程》—第9章 软件质量
  14. Tomcat 常见的几个报错与启动问题
  15. Python-----redis数据库
  16. 微服务ServiceMesh及三种模式介绍
  17. oracle无法启动asm实例记录
  18. 黄聪:保持web页面生成的app一直处于用户登录状态不退出
  19. VMware Authorization Service不能启动 VMware虚拟机状态已挂起无法恢复解决方案
  20. 最新Windows下c++读写锁SRWLock介绍

热门文章

  1. 阿里云服务器ECS(Centos8)下安装和配置python3.8
  2. JetBrains之全家桶破解
  3. SVN的安装和使用手册2
  4. Servlet简介和ServletContext
  5. springboot AOP配置
  6. 《黑马旅游网》综合案例六 BaseServlet 抽取
  7. Minio整合SpringBoot
  8. C++中map用法详解(转)
  9. Blockchain for Edge of Things: Applications, Opportunities, and Challenges
  10. 如何在eclipse里的动态Web项目建立后缀为xml的文件