前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11. Springboot集成Dubbo3(二)示例demo

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

作者头像
有一只柴犬
发布2024-02-20 09:28:47
2260
发布2024-02-20 09:28:47
举报
文章被收录于专栏:JAVA体系JAVA体系

1、前

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

2、注册中心

官方仍然推荐zookeeper作为注册中心。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

先下载Zookeeper:Apache ZooKeeper

下载最新版本后解压。

接着,打开conf文件夹,把zoo_sample.cfg文件复制一份为zoo.cfg。以为zookeeper默认会读取zoo.cfg,zookeeper刚解压出来的版本仅仅提供了一个最简配置文件zoo_sample.cfg,需要我们自行修订。我们不做任何修订,直接复制一份出来。

我们可以观察一下zoo.cfg中的一些简单配置,我们删除一下注释内容,只剩下以下配置:

代码语言:javascript
复制
# 时间配置最小但域,其他时间配置以整数倍tickTime计算
tickTime=2000
#Leader允许Follower启动时在initLimit时间内完成数据同步,单位:tickTime
initLimit=10
# Leader发送心跳包给集群中所有Follower,若Follower在syncLimit时间内没有响应,那么Leader就认为该follower已经挂掉了,单位:tickTime
syncLimit=5
# 配置zookeeper的数据目录
dataDir=/tmp/zookeeper
# 用于接收客户端请求的端口
clientPort=2181

最后,我们直接双击binzkServer.cmd,看下以下内容,就说明启动成功了。

3、快速开始

简单示例场景:项目分Server服务层和Portal消费层。Portal调用Server提供的sayHello方法,输出相应内容,使用dubbo3进行Portal和Server的RPC通信。

3.1、添加dubbo3依赖

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>3.2.10</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>3.2.10</version>
        <type>pom</type>
    </dependency>
</dependencies>

3.2、dubbo3-api

这一层我们定义一个公用的接口类和实体类。我们定义了IUserService。

代码语言:javascript
复制
public interface IUserService {
    String sayHello(String name);
}

3.3、dubbo3-server

3.3.1、添加依赖
代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>3.2.10</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>3.2.10</version>
        <type>pom</type>
    </dependency>

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>dubbo3-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

</dependencies>
3.3.2、实现IUserService

定义service实现类,实现IUserService接口。这里的Service需要加上@DubboService,声明自己托管给dubbo进行管理。

代码语言:javascript
复制
import com.example.dubbo3api.service.IUserService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class UserServiceImpl implements IUserService {

    @Override
    public String sayHello(String name){
        return name + "say hello, my bro.";
    }
}
3.3.3、添加配置文件application.properties
代码语言:javascript
复制
server.port=7010

# 该服务注册到dubbo中暴露的协议端口
dubbo.protocol.port=20080
# 该服务注册到dubbo中暴露的协议
dubbo.protocol.name=dubbo
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.application.name=dubbo3-server
3.3.4、修改Application启动类

启动类需要加上EnableDubbo注解,表示开启dubbo。

代码语言:javascript
复制
@EnableDubbo
@SpringBootApplication
public class Dubbo3ServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(Dubbo3ServerApplication.class, args);
    }

}

接着就可以直接启动server层了。直接启动,发现一直卡在连接zookeeper上,过了一会直接报错了。

3.3.5、出错解决

由于我使用的是JDK17,当Zookeeper对象实例化时,会调用InetSocketAddress的toString方法;而在jdk17中,该方法解析空字符串会拼装/。所以要么降回去使用JDK8,要么修改这个问题。降是不可能降的,一辈子都不可能降的。所以我们开始升级zookeeper版本,由于自带的zookeeper版本为3.4.14,太低了,我们排除后,升级zookeeper版本,问题即可解决。

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-dependencies-zookeeper</artifactId>
    <version>3.2.10</version>
    <type>pom</type>
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.9.1</version>
</dependency>

继续启动,看到如下输出,启动成功。

3.4、dubbo3-portal

3.4.1、添加依赖

同样需要排除zookeeper版本,自己引入高版本的zookeeper。

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>3.2.10</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>3.2.10</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.example</groupId>
        <artifactId>dubbo3-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
3.4.2、定义Controller

定义controller,调用userService的sayHello()。引用IUserService时,需要使用@DubboReference注入。

代码语言:javascript
复制
@RestController
public class UserController {

    @DubboReference
    private IUserService userService;

    @GetMapping("sayHello/{name}")
    public String sayHello(@PathVariable String name){
        return userService.sayHello(name);
    }

}
3.4.3、添加配置文件application.properties
代码语言:javascript
复制
server.port=8010

# 连接注册中心,需要与dubbo3-server的注册中心一致
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.application.name=dubbo3-portal
3.4.4、修改启动类

启动类需要加上EnableDubbo注解,表示开启dubbo。

代码语言:javascript
复制
@EnableDubbo
@SpringBootApplication
public class Dubbo3PortalApplication {

    public static void main(String[] args) {
        SpringApplication.run(Dubbo3PortalApplication.class, args);
    }

}
3.4.5、启动成功,访问测试

4、小结

Dubbo3与Springboot的简单集成几步就可以了,集成还是相当容易的。目前为止Dubbo3和Dubbo2在集成上发现还是有一些区别的。如:

  1. Server注册到Zookeeper中,Dubbo2的注解为@Service,Dubbo3使用@DubboService。而@Service已经被标注为删除。相比Dubbo2来讲更加有辨识度,相信不少因为@Service用成了Spring的注解,而导致service一致注册失败问题而抓狂的朋友吧。
  2. Portal注入Service时,Dubbo2注解为@Reference,Dubbo3使用@DubboReference,命名上更加有辨识度。
  3. 配置上,同样Dubbo2和Dubbo3提供了XML配置方式和注解方式,但是Dubbo3相比Dubbo2,配置起来更加简单
  4. 依赖不同,Dubbo3特地提供了Springboot集成模块依赖,而不是独立的apache依赖。

简单使用下来发现目前有这几点不同,其他的功能还有待继续深入研究。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、前
  • 2、注册中心
  • 3、快速开始
    • 3.1、添加dubbo3依赖
      • 3.2、dubbo3-api
        • 3.3、dubbo3-server
          • 3.3.1、添加依赖
          • 3.3.2、实现IUserService
          • 3.3.3、添加配置文件application.properties
          • 3.3.4、修改Application启动类
          • 3.3.5、出错解决
        • 3.4、dubbo3-portal
          • 3.4.1、添加依赖
          • 3.4.2、定义Controller
          • 3.4.3、添加配置文件application.properties
          • 3.4.4、修改启动类
          • 3.4.5、启动成功,访问测试
      • 4、小结
      相关产品与服务
      微服务引擎 TSE
      微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com