springboot集成dubbo踩坑文档

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

springboot集成dubbo踩坑文档

zookeeper

下载zookeeper,解压到路径

/Users/chen/MyWorkProgram/apache-zookeeper-3.6.2-bin

然后到下级目录config中copy文件zoo_sample.cfg,改名为zoo.cfg

zoo.cfg文件内容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data
clientPort=2181
dataLogDir=/tmp/zookeeper/log

启用zookeeper:

zkserver.sh start
2. 总结:springboot引入dubbo依赖及版本
<!--   dubbo start     -->
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-spring-boot-starter</artifactId>
  <version>3.0.2.1</version>
</dependency>
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo</artifactId>
  <version>3.0.2.1</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-framework</artifactId>
  <version>4.2.0</version>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-recipes</artifactId>
  <version>4.2.0</version>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-x-discovery</artifactId>
  <version>4.2.0</version>
</dependency>
<!--   dubbo end     -->

dubbo配置文件如下:

dubbo:
  application:
    name: dubbo-micro
  registry:
    address: zookeeper://127.0.0.1:2181  #注册zookeeper的地址
    timeout: 2000000
  protocol:
    name: dubbo
    port: 20878
  consumer:
    check: false   #不检查消费者对应的生产者是否存在
编写项目代码及踩坑
micro模块:dubbo的consumer方

项目主启动类添加注解:@EnableDubbo

使用@DubboReference注解,调用dubbo生产者

@DubboReference
private TestApi testApi;
  1. 启动项目报错如下:
Caused by: java.lang.ClassNotFoundException: org.apache.curator.framework.CuratorFrameworkFactory

main模块缺少依赖:

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>
  1. 添加后,再次启动项目报错如下:
ClassNotFoundException: org.apache.curator.framework.recipes.cache.NodeCacheListener

main模块缺少依赖:

<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-recipes</artifactId>
  <version>2.8.0</version>
</dependency>
  1. 添加后,再次启动项目报错如下:
ClassNotFoundException: org.apache.curator.x.discovery.ServiceDiscoveryBuilder

main模块缺少依赖:

<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery -->
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-x-discovery</artifactId>
  <version>5.1.0</version>
</dependency>

添加后成consumer功启动(注意,这里把dubbo.consumer.check关闭了,启动成功):

order模块:dubbo的provider方

父模块添加如下依赖,用于管理依赖版本

<!--   dubbo start     -->
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-spring-boot-starter</artifactId>
  <version>3.0.2.1</version>
</dependency>
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo</artifactId>
  <version>3.0.2.1</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-framework</artifactId>
  <version>2.13.0</version>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-recipes</artifactId>
  <version>2.13.0</version>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-x-discovery</artifactId>
  <version>5.1.0</version>
</dependency>
<!--   dubbo end     -->

main模块添加依赖:

<!--   dubbo start     -->
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo</artifactId>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-framework</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-recipes</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.curator</groupId>
  <artifactId>curator-x-discovery</artifactId>
</dependency>
<!--   dubbo end     -->

service添加依赖:

<!--   dubbo start     -->
<dependency>
  <groupId>org.apache.dubbo</groupId>
  <artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!--   dubbo end     -->

主启动类添加注解:

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

@EnableDubbo

在api创建接口用于外部调用:

public interface TestApi {
    void testDubbo();
}

在service接口继承TestApi:

#DubboService注解将接口注册到dubbo
@DubboService(interfaceClass = TestApi.class,version = "1.0.0")
@Component
public class TestService implements TestApi{
    @Override
    public void testDubbo() {
        System.out.println("testApi调用到了");
    }
}

启动order项目报错:

Action:

Correct the classpath of your application so that it contains compatible versions of the classes org.apache.curator.x.discovery.details.ServiceDiscoveryImpl and org.apache.curator.framework.api.CreateBuilder

2022-02-23 16:37:31.902  WARN 48028 --- [           main] ConfigServletWebServerApplicationContext : Exception thrown from ApplicationListener handling ContextClosedEvent

java.lang.RuntimeException: java.lang.RuntimeException: org.apache.curator.framework.api.DeleteBuilder.guaranteed()Ljava/lang/Object;

版本冲突:

将父模块的pom.xml文件中的依赖版本

  1. curator-framework
  2. curator-recipes
  3. curator-x-discovery

全部改成4.2.0版本,然后启动order,启动成功

zookeeper查看dubbo
#启动客户端
chen@localhost bin % ./zkCli.sh 
#查看日志
[zk: localhost:2181(CONNECTED) 0] ls /dubbo
[com.example.TestApi, config, mapping, metadata]
#查看指定服务的消费者如下:消费者注册成功
[zk: localhost:2181(CONNECTED) 119] ls /dubbo/com.example.TestApi/consumers 
[dubbo%3A%2F%2F192.168.1.165%2Fcom.example.TestApi%3Fapplication%3Ddubbo-micro%26category%3Dconsumers%26check%3Dfalse%26dubbo%3D2.0.2%26interface%3Dcom.example.TestApi%26metadata-type%3Dremote%26methods%3DtestDubbo%26pid%3D47447%26qos.enable%3Dfalse%26release%3D3.0.2.1%26side%3Dconsumer%26sticky%3Dfalse%26timestamp%3D1645602972378]
#查看指定服务的生产者如下:生产者注册成功
[zk: localhost:2181(CONNECTED) 2] ls /dubbo/com.example.TestApi/providers
[dubbo%3A%2F%2F192.168.1.165%3A20879%2Fcom.example.TestApi%3Fanyhost%3Dtrue%26application%3Ddubbo-order%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26interface%3Dcom.example.TestApi%26metadata-type%3Dremote%26methods%3DtestDubbo%26pid%3D47966%26release%3D3.0.2.1%26revision%3D1.0.0%26service-name-mapping%3Dtrue%26side%3Dprovider%26timestamp%3D1645605185700%26version%3D1.0.0]
测试

将micro模块的yml中的dubbo.consumer.check=false注释,重新启动,报错如下:

java.lang.IllegalStateException: Failed to check the status of the service com.example.TestApi. No provider available for the service com.example.TestApi from the url dubbo://192.168.1.165/com.example.TestApi?application=dubbo-micro&dubbo=2.0.2&interface=com.example.TestApi&metadata-type=remote&methods=testDubbo&pid=48277&qos.enable=false&register.ip=192.168.1.165&release=3.0.2.1&side=consumer&sticky=false&timestamp=1645606944192 to the consumer 192.168.1.165 use dubbo version 3.0.2.1

经查:provider

//provider的版本指定为1.0.0
@DubboService(interfaceClass = TestApi.class,version = "1.0.0")

zookeeper中provider的信息,尾部标注version:version=1.0.0

[dubbo%3A%2F%2F192.168.1.165%3A20879%2Fcom.example.TestApi%3Fanyhost%3Dtrue%26application%3Ddubbo-order%26deprecated%3Dfalse%26dubbo%3D2.0.2%26dynamic%3Dtrue%26generic%3Dfalse%26interface%3Dcom.example.TestApi%26metadata-type%3Dremote%26methods%3DtestDubbo%26pid%3D48223%26release%3D3.0.2.1%26revision%3D1.0.0%26service-name-mapping%3Dtrue%26side%3Dprovider%26timestamp%3D1645606764608%26version%3D1.0.0]

而micro在消费的时候没有指定provider的版本,更正为:

@DubboReference(version = "1.0.0")
private TestApi testApi;

至此:micro通过dubbo调用order接口调试成功

注意事项:
  1. dubbo-spring-boot-starter,dubbo,curator-framework,curator-recipes,curator-x-discovery的版本问题
  2. provider指定版本后,consumer也要指定相同版本
  3. 如果调用的时候传输的参数是对象,记得实现序列化(在远程调用过程中函数不在同一个内存里,无法直接传递函数的参数,因此需要客户端把参数转换成字节流,传给服务端,然后服务端将字节流转换成自身能读取的格式,是一个序列化和反序列化的过程。)
  4. dubbo采用的是RPC调用,micro服务调用order服务中的方法时,先把参数序列化打包传输给order,order接收包之后解析,得到对应的调用函数的函数指针,调用函数,把返回的参数序列化,打包返回给micro,micro解析处理,至此调用链路完成(寻找调用的函数指针:order端在本地维护一个Call ID到函数指针的映射call_id_map,可以用Map<String, Method> callIdMap,order根据请求包解析出key值:Call ID,得到value值:函数指针)
springboot dubbo resteasy 简易集成swagger 之前在springmvc中集成swagger,轻松加愉快,整套springfox进来,ui加api都有了。 现在的新项目,采用了springboot + dubbo + resteasy直出restful api的方式,轻便确实轻便,但是不如springmvc的资料多。不过,也让我在使用中,增加了更多的机会去了解底层。 翻了下swagger的文档,他是已经支持了resteasy了。于是拿来了他... 阅读详情

相关推荐

Springboot + dubbo + zookeeper 整合记录

闲来无事想练手一下springboot+dubbo+zk,因为公司的架构不支持(比较low,RPC用的还是ESB 这种比较年久的东西了) 所以只好自己本地整下,以后工作要用到也不至于,提前了. 搭建过程参考了网上很多文章,磕磕绊绊,最后还是搭建成功了,看了数篇文章后,最推荐的还是这篇,讲的比较详细,但是实际搭建起来还是有出入的地方, 后面一边填一边说 参考大佬文章:https://www.jianshu.com/p/6acfb2398bf4 ---------------------..

Rex_ZhengRH的博客 777

Caused by: java.lang.ClassNotFoundException: org.springframework.core.NativeDetector

最近搭建Springboot-Demo 一顿操作后报错。

知识改变命运,ヾ(◍°∇°◍)ノ゙【求关注】 2850

【异常】使用Dubbo和zookeeper时报错NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory

SpringBoot2使用Dubbo和zookeeper时报错: > Caused by: java.lang.ClassNotFoundException: > org.apache.curator.framework.CuratorFrameworkFactory

奶爸的编程之路,也就一周冷个三天 3314

Dubbo(一):dubbo-spring-boot-starter

dubbo-spring-boot-starter English Dubbo Spring Boot Starter。也可以关注dubbo官方的dubbo-spring-boot-project 支持jdk版本为1.6或者1.6 (在修改源码前,请导入googlestyle-java.xml以保证一致的代码格式) 如何发布dubbo服务 添加依赖: <dependenc...

低调小熊猫 www.ilovey.live 2094

dubbospringboot集成和使用dubbo-spring-boot-starter

dubbo最近更新了dubbo-spring-boot-starter的jar包,废话不多少,看看如何使用。首先我们可以通过github编译打包最新的starter,Git地址为:https://github.com/alibaba/dubbo-spring-boot-starter.git在springboot项目的pom.xml中新增,添加maven的依赖。 &lt;!--dubbo-spr...

花未央D8023的博客 5万+

Spring Boot 整合 Dubbo(三)

Spring BootDubbo 整合的依赖有3个版本。另一个是 alibaba 推出的还有一个是个人开发者推出的这三个依赖的配置好像都不太一样,有些依赖还得添加额外的依赖。所以你在看博客的时候一定要看清楚依赖,尤其是第一个和第二个。这篇文章使用的是个人开发者推出的依赖,如果你不想使用这个版本的依赖,就不用再往下看了。

拾一二的博客 1797

SpringBoot】| SpringBoot集成Dubbo

SpringBoot】| SpringBoot集成Dubbo

m0_61933976的博客 4281

SpringBoot集成Dubbo启用gRPC协议

Dubbo 在 2.7.5 版本开始支持原生 gRPC 协议,对于计划使用 HTTP/2 通信或者期望 gRPC 协议支持服务治理能力的,都可以考虑接入 Dubbo 体系启用 gRPC 协议。由于官网给的 代码示例 是基于 spring,现在基本上都是基于SpringBoot开发,所以本文提供一下 SpringBoot 的代码示例。此外还会简单说明 Dubbo 支持的原生 gRPC 协议与原生 gRPC 协议在代码开发时的区别。如果对gRPC协议不了解的,后续文章会有更新,请持续关注。

二蛋的博客 3372

SpringBoot集成Dubbo

这次我们来实现一下springboot集成dubbo,并介绍一些dubbo的具体功能。然后包含一些zookeeker中的信息1.2.1 dubbo-parent 在dubbo-parent中引入parent为spring-boot-starter-parent 这里我们使用的版本为2.1.5。1.2.2 dubbo-dependency 有几点需要注意1.2.3 dubbo-consumer 1.2.4 dubbo-provider 1.2.5 dubbo-interface 内......

MX__LL的博客 1万+

SpringBoot项目集成Dubbo

SpringBoot项目集成Dubbo

qq_51447436的博客 1万+

SpringBoot框架集成Dubbo

SpringBoot框架集成Dubbo

weixin_44362089的博客 1023

springboot 集成 Dubbo + Zookeeper

上述方式采用 xml 方式配置,后续发布 通过dubbo注解来实现功能,甚至 通过api方式集成文档正在持续更新中。主页中其他文章也不错呦,有兴趣可以点击查看呢~~~~,持续更新java相关文章…

爱开发的高高 1741

SpringBoot集成Dubbo

简单实现springboot中使用dubbo 行动前准备: 1.搭建zookeeper集群:https://blog.csdn.net/ws_kfxd/article/details/94554018 2.安装dubbo控制台:https://blog.csdn.net/ws_kfxd/article/details/87902693 搭建项目: 总共三部分:中间暴露接口项目(API)、服务提供者...

小帅的博客 3759

springboot 整合 dubbo 笔记

最近在学习dubbo框架,采用当前主流的spring boot 集成 dubbo,学习过程中遇到了几个问题,在此记录下,希望可以帮到同样遇到问题的你。 问题1.The bean ‘dubboConfigConfiguration.Single’ could not be registered. A bean with that name has already been defined and overriding is disabled. Description: The bean 'dubboConf

weixin_43012300的博客 2676

springBoot集成dubbo

1.api 用来存放通用的实体类以及工具类 1.1.创建一个maven项目或者 创建一个springBoot项目作为api,下面写一个小demo进行展示 1.2新增实体类BaseResult在api中 1.3 由于我们这个项目需要其他项目引用,所以去掉spring-boot-maven-plugin插件,具体原因点击此处 1.4 打包项目 2.provider 暴露服务的服务提供者 2.1 引入maven依赖 2.2 实体类UserAddress 2.3 service 2.4 service的..

zhiyikeji的博客 3375

11. Springboot集成Dubbo3(二)示例demo

Dubbo3从Dubbo2演进过来之后,已经从单纯的RPC框架改进成为了一个微服务框架,具备RPC框架能力的同时,还兼备服务治理能力。今天简单介绍下Dubbo3和Springboot集成过程。

有一只柴犬的专栏 2608

SpringBoot系列之集成Dubbo的方式

SpringBoot系列之集成Dubbo的方式 本博客介绍Springboot框架集成Dubbo实现微服务的3种常用方式,对于Dubbo知识不是很熟悉的,请先学习我上一篇博客:SpringBoot系列之集成Dubbo实现微服务教程,本博客只是对上篇博客的补充,上篇博客已经介绍过的就不重复介绍

Nicky's blog 4721

SpringBoot - 集成Dubbo

一、Dubbo Apache Dubbo 是一款高性能、轻量级的开源 Java RPC服务框架 Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力: 1、面向接口代理的高性能RPC调用 2、智能容错和负载均衡 3、服务自动注册和发现 4、高度可扩展能力 5、运行期流量调度 6、可视化的服务治理与运维 Dubbo官网 https://dubbo.apache.org/zh/ Dubbo主要核心部件 Remoting: 网络通信框架,实现了 sync-over-async 和 .

MinggeQingchun的博客 2509
上一篇: spring集成Nacos
下一篇: kafka基础命令及基础知识
bug自动成长
博客等级 码龄6年 26粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值