SpringBoot整合Dubbo3.0基础配置

SpringBoot整合Dubbo3.0基础配置SpringBoot 整合 Dubbo3 0 基础配置 dubbo spring boot starter 一 说明众所周知 阿里早已把 dubbo 捐赠给了 Apache 现在 dubbo 由 Apache 在维护更新 dubbo 也已经成了 Apache 下的顶级项目 所以本 demo 项目所依赖的坐标是 Apache 官方最新的 3 0 4 坐标 dependency groupId org apache dubbo groupId dependency

SpringBoot整合Dubbo3.0基础配置(dubbo-spring-boot-starter)

一、说明

众所周知,阿里早已把dubbo捐赠给了Apache,现在dubbo由Apache在维护更新,dubbo也已经成了Apache下的顶级项目。所以本demo项目所依赖的坐标是Apache官方最新的3.0.4坐标。

<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency> 

下面的这些依赖 不是我们考虑的依赖

<dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>1.0.0</version> </dependency> 

SpringBoot是我们喜欢的项目配置框架,因为不用写xml,使用配置文件来约定我们的配置。本demo项目采用父子模块结构,解决了SpringBoot项目父子模块依赖的问题,可作为其他类似结构项目的参考。我们本着依赖最小化原则,不需要的依赖我们不引入。本demo项目dubbo配置属性只是基础配置,如需更多功能配置,请自行扩展。

本demo项目采用zookeeper为注册中心,默认你已经安装好zookeeper服务器,并已经启动。

二、父模块创建

父模块只是一个pom工程,用来管理依赖

选择Spring Initializr

在这里插入图片描述

选择Maven POM

在这里插入图片描述

这一步我们不勾选依赖

在这里插入图片描述

这就是建好的父模块结构,只有pom.xml文件
在这里插入图片描述

这种做的目的就是为了让spring-boot-starter-parent帮我们构建、管理、打包项目,还不会生成一些不需要的文件夹和文件,省去自己去做这些的麻烦,避免项目打包后运行出错。当然你也可以不使用<parent>标签,不依赖spring-boot-starter-parent,有些教程让依赖spring-boot-dependencies,这样你就要自己解决打包的问题。

下面我们删除不需要的依赖,建立我们自己的依赖管理

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>dubbo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dubbo</name> <description>Demo project for Spring Boot to Dubbo</description> <properties> <java.version>1.8</java.version> <dubbo-boot.version>3.0.4</dubbo-boot.version> <zkclient.version>4.2.0</zkclient.version> </properties> <dependencyManagement> <dependencies> <!-- apache 官方 3.0 starter依赖 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo-boot.version}</version> </dependency> <!-- zookeeper客户端 只需引入此依赖curator-framework curator-recipes 都有 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-x-discovery</artifactId> <version>${zkclient.version}</version> </dependency> </dependencies> </dependencyManagement> </project> 

三、创建interface模块

interface模块用来管理暴露的接口和实体类。在父模块下新建Module,直接选择maven方式创建

在这里插入图片描述

pom.xml文件只需引入lombok依赖

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>dubbo</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-interface</artifactId> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> </build> </project> 

User.java

@Data @NoArgsConstructor @AllArgsConstructor public class User implements Serializable { 
    private static final long serialVersionUID = L; private Integer userId; private String userName; } 

UserService.java

public interface UserService { 
    User getByUserId(Integer userId); } 

interface模块结构

在这里插入图片描述

四、创建provider模块

和interface模块一样,采用maven方式,在父模块下新建module

pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>dubbo</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-provider</artifactId> <dependencies> <!-- 不是web工程 只需引入这个即可 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-x-discovery</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>dubbo-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

配置文件:

# 这里的配置属性只是基础配置,如需更多功能配置,请自行扩展 dubbo: application: name: dubbo-provider registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20880 

UserServiceImpl

/ * 3.0x后dubbo @Service 为了和 spring的 @Service区分,改为了 @DubboService,相应的 @Reference * 也改为了 @DubboReference */ @DubboService public class UserServiceImpl implements UserService { 
    // 模拟数据 private static final List<User> USERS = Arrays.asList( new User(1, "张三"), new User(2, "李四") ); @Override public User getByUserId(Integer userId) { 
    for (User user : USERS) { 
    if (user.getUserId().equals(userId)) { 
    return user; } } return null; } } 

为了provider工程能运行,我们需添加启动类 DubboProviderApplication.java

@EnableDubbo @SpringBootApplication public class DubboProviderApplication { 
    public static void main(String[] args) { 
    SpringApplication.run(DubboProviderApplication.class, args); } } 

provider模块结构

在这里插入图片描述

五、创建consumer模块

consumer模块使用web工程对外提供访问,用来测试从provider获取数据,展示到web页面上。创建方式和上面的2个模块一样,采用maven方式,在父模块下新建module。

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>dubbo</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-consumer</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-x-discovery</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>dubbo-interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

配置文件:

dubbo: application: name: dubbo-consumer registry: address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20880 # 由于zookeeper启动时要占用8080端口,我们要显示指定端口,要不然会端口冲突 server: port: 8081 

UserController.java

@RestController public class UserController { 
    @DubboReference private UserService userService; @GetMapping("/user/{userId}") public ResponseEntity<User> getByUserId(@PathVariable("userId") Integer userId) { 
    System.out.println("userId = " + userId); User user = userService.getByUserId(userId); System.out.println("user = " + user); return ResponseEntity.ok(userService.getByUserId(userId)); } } 

DubboConsumerApplication.java

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

consumer模块结构

在这里插入图片描述

整个项目的结构

在这里插入图片描述

六、测试效果

在浏览器看测试结果

在这里插入图片描述

在这里插入图片描述

七、打包测试

项目打包上线才是我们最终目的,所以我们需要测试打包后的效果

打包后的项目,只需要执行provider和consumer就可以了

在这里插入图片描述
在这里插入图片描述

关闭idea启动的工程,运行jar包

运行provider:

在这里插入图片描述

运行consumer:

在这里插入图片描述

浏览器查看效果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

完结。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231896.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月15日 上午8:01
下一篇 2025年11月15日 上午8:22


相关推荐

  • acwing-1080. 骑士(基环树dp)[通俗易懂]

    acwing-1080. 骑士(基环树dp)[通俗易懂]Z 国的骑士团是一个很有势力的组织,帮会中聚集了来自各地的精英。他们劫富济贫,惩恶扬善,受到了社会各界的赞扬。可是,最近发生了一件很可怕的事情:邪恶的 Y 国发起了一场针对 Z 国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的 Z 国又怎能抵挡得住 Y 国的军队。于是人们把所有希望都寄托在了骑士团身上,就像期待有一个真龙天子的降生,带领正义打败邪恶。骑士团是肯定具备打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾。每个骑士有且仅有一个他自己最厌恶的骑士(当然不是他自己),他是绝对不

    2022年8月9日
    5
  • 第十讲 线性反馈移位寄存器

    第十讲 线性反馈移位寄存器1 反馈移位寄存器 Feedbackshif FSR 移位寄存器是流密码产生密钥流的一个主要组成部分 GF 2 上一个 n 级反馈移位寄存器由 n 个二元存储器与一个反馈函数组成 如下图所示 反馈移位寄存器的状态在任一时刻 这些级的内容构成该反馈移位寄存器的状态 每一状态对应于 GF 2 上的一个 n 维向量 共有种可能的状态 每一时刻的状态可用 n 维向量表示 其中是第 i 级存储器的内容 反馈函数初始状态由用户确定 反馈函数是 n 元布尔函数 即函数的自变量和因

    2026年3月20日
    2
  • 商品管理系统_营销系统四大系统

    商品管理系统_营销系统四大系统题目:商品管理系统语言和环境实现语言Java环境要求JDK8,IDEA,Tomcat7,MySQL功能要求项目开发使用SSM(Mybatis+Spring+Springmvc)实现商品

    2022年8月3日
    9
  • 什么是微服务 ? 微服务优缺点分析

    什么是微服务 ? 微服务优缺点分析微服务最早由 MartinFowler 与 JamesLewis 于 2014 年共同提出 微服务架构风格是一种使用一套小服务来开发单个应用的方式途径 每个服务运行在自己的进程中 并使用轻量级机制通信 通常是 HTTPAPI 这些服务基于业务能力构建 并能够通过自动化部署机制来独立部署 这些服务使用不同的编程语言实现 以及不同数据存储技术 并保持最低限度的集中式管理 二 微服务的优点 1 每个微服务都很小 这样能聚焦一个指定的业务功能或业务需求 2 微服务能够被小团队单独开发 这个

    2026年3月17日
    2
  • 成员变量和局部变量的区别是什么_实例变量和成员变量的区别

    成员变量和局部变量的区别是什么_实例变量和成员变量的区别成员变量和局部变量的区别?A:在类中的位置不同成员变量:在类中方法外局部变量:在方法定义中或者方法声明上B:在内存中的位置不同成员变量:在堆内存局部变量:在栈内存C:生命周期不同成员变量:随着对象的创建而存在,随着对象的消失而消失局部变量:随着方法的调用而存在,随着方法的调用完毕而消失D:初始化值不同成员变量:有默认初始化值局部变量:没有默认初始化值,必须定义,赋值,然后才…

    2025年7月17日
    7
  • [python]解析通达信盘后数据获取历史日线数据[通俗易懂]

    [python]解析通达信盘后数据获取历史日线数据[通俗易懂]转自:http://bbs.pinggu.org/forum.php?mod=viewthread&tid=4804415&page=1平时我们在做离线的模型回溯测试时候,需要历史的k线数据。可是通达信的日线数据如下:日线数据在通达信的安装目录:vipdoc\sh\lday下面本地的通达信是没有开放api和外部的自己的交易回溯测试…

    2022年7月24日
    109

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号