首页 > 其他分享 >SpringBoot集成Dubbo

SpringBoot集成Dubbo

时间:2024-11-14 12:30:27浏览次数:1  
标签:集成 Dubbo SpringBoot dubbo org import com example

Dubbo教程(二) | SpringBoot集成Dubbo

一、Dubbo Spring Boot 版本关系

在使用 Dubbo 和 Spring Boot 进行微服务开发时,版本的选择是非常重要的。
不同版本之间可能会存在兼容性问题,导致服务无法正常运行。
因此,了解 Dubbo Spring Boot 版本关系是非常必要的。

目前网上有两个方式可以看匹配关系
方式一:Dubbo 官方提供
方式二: github 官方提供(已经过时了,就不要看了)

Dubbo 官方提供的 对应关系:

https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/versions/

Dubbo分支 最新版本 JDK Spring Boot 详细说明
3.3.x (当前文档) 3.3.0 8, 17, 21 2.x、3.x 生产可用(推荐,长期维护)! 最新Triple协议升级,内置Metrics、Tracing、GraalVM支持等
3.2.x 3.2.10 8, 17 2.x、3.x 生产可用(长期维护)!
3.1.x 3.1.11 8, 17 2.x、3.x 仅修复安全漏洞!
3.0.x 3.0.15 8 2.x 停止维护!
2.7.x 2.7.23 8 2.x 停止维护!
2.6.x 2.6.20 6, 7 - 停止维护!
2.5.x 2.5.10 6, 7 - 停止维护!

github 官方提供的 对应关系(该版本说明很久没有更新了):

https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/versions/

旧版本
如果您仍然使用版本低于 2.7.0 的旧版 Dubbo,请使用以下 Spring Boot 启动器:

Dubbo Spring Boot Dubbo Spring Boot
0.2.1.发布 2.6.5+ 2.x
0.1.2.发布 2.6.5+ 1.x

去看manven 官网 仓库里面你就会发现。工件已经迁移了
在这里插入图片描述

二、引入maven

Dubbo 起步依赖

<!--dubbo集成springboot依赖-->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.15</version>
</dependency>
123456

ZooKeeper

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.7.0</version>
</dependency>
12345

ZooKeeper API 管理依赖(ZooKeeper的高级操作工具包)

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.1.0</version>
</dependency>
12345

三、项目结构

在这里插入图片描述
对目录进行分析:

分为三个模块:

  • api 接口 :该模块必须要有,这里放置数据和接口)
  • provider 生成者:业务接口提供者,实现接口,实现api模块中的 接口,让 customer 消费)
  • customer 消费者:调用提供者中的接口

父模块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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>springboot-dubbo-demo</artifactId>

    <packaging>pom</packaging>

    <version>0.0.1-SNAPSHOT</version>

    <modules>
        <module>api</module>
        <module>provider</module>
        <module>customer</module>
    </modules>


    <name>springboot-dubbo-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <!--dubbo集成springboot依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.15</version>
        </dependency>
        <!-- Zookeeper 客户端依赖 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.7.0</version>
        </dependency>
        <!-- ZooKeeper的高级操作工具包-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.1.0</version>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
</project>

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

aip模块 构建

aip 模块 目录结构 如下:

在这里插入图片描述
实体类

package com.example.api.model;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
public class User implements Serializable {

    private Integer id;
    private String name;
    private String sex;
    private String age;

    public User(Integer id, String name, String sex, String age) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}

123456789101112131415161718192021222324

接口

package com.example.api.service;

import com.example.api.model.User;

import java.util.List;

public interface UserService {

    List<User> findAll();

    String sayHello(String name);
}

12345678910111213

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>springboot-dubbo-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>api</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    
</project>
12345678910111213141516171819

provider模块 构建

provider模块目录结构 如下:
在这里插入图片描述

业务实现类

关键注解:
@DubboService:主要用于标记一个服务提供者,使其能够被 Dubbo 框架识别并注册到服务注册中心。

package com.example.provider.service.impl;

import com.example.api.model.User;
import com.example.api.service.UserService;
import org.apache.dubbo.config.annotation.DubboService;

import java.util.LinkedList;
import java.util.List;

@DubboService
public class UserServiceImpl implements UserService {

    @Override
    public List<User> findAll() {

        LinkedList users = new LinkedList();
        User user = new User(1, "小明(来自消费者)", "男", "20");
        User user1 = new User(2, "小紅(来自消费者)", "女", "22");
        users.add(user);
        users.add(user1);
        return users;
    }

    @Override
    public String sayHello(String name) {
        return "hello,"+name;
    }
}
12345678910111213141516171819202122232425262728

启动类

关键注解:
@DubboComponentScan 扫描 Dubbo相关注解

package com.example.provider;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@DubboComponentScan(basePackages = "com.example.provider.*")
public class ProviderApplication {

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

123456789101112131415

application.yml

server:
  port: 8001
#生成者模块
dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://127.0.0.1:2181  # zookeeper 注册中心地址
  protocol:
    name: dubbo
    port: 20880  # dubbo 协议端口,默认为20880
1234567891011

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>springboot-dubbo-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>provider</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


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


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.provider.ProviderApplication</mainClass>
                    <!--                    <skip>true</skip>-->
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162

customer模块 构建

customer模块目录结构 如下:
在这里插入图片描述

控制层

关键注解:
@DubboReference :主要作用是在服务消费者端引用远程服务提供者的服务

package com.example.customer.controller;

import com.example.api.model.User;
import com.example.api.service.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class TestController {

    @DubboReference
    private UserService userService;

    @RequestMapping("/findAll")
    public List<User> findAll(){
        return userService.findAll();
    }

    @RequestMapping("sayHello")
    public String sayHello(String name){
        return userService.sayHello(name);
    }

    @RequestMapping("hello/{name}")
    public String hello(@PathVariable String name){
        return "hello"+name;
    }
}

12345678910111213141516171819202122232425262728293031323334

启动类

关键注解:
@DubboComponentScan 扫描 Dubbo相关注解

package com.example.customer;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@DubboComponentScan(basePackages = "com.example.customer.*")
public class CustomerApplication {

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

123456789101112131415

application.yml

server:
  port: 8002
#消费者模块
dubbo:
  application:
    name: dubbo-customer
  registry:
    address: zookeeper://127.0.0.1:2181 # zookeeper 注册中心地址
12345678

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>springboot-dubbo-demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>customer</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


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


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.customer.CustomerApplication</mainClass>
<!--                    <skip>true</skip>-->
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061

参考文章
【1】SpringBoot集成Dubbo实现RPC远程过程调用
【2】springboot 整合 dubbo 教程(注解方式) + 新版 dubbo admin 使用教程
【3】dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。

标签:集成,Dubbo,SpringBoot,dubbo,org,import,com,example
From: https://www.cnblogs.com/xiondun/p/18545735

相关文章

  • SpringBoot基础系列学习(六):整合SpringDataJpa
    文章目录1.简介优点缺点代码数据库导入依赖连接数据库ddl-auto说明实体类mapper层Controller层结果1.简介SpringDataJPA是SpringData家族的一部分,可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spri......
  • 从零到一构建并打包 React + TypeScript + Less组件库教程(一、项目初始化搭建+代码规
    本系列涉及的内容如下:组件库基础搭建,react+ts+less项目规范,包括但不限于prettier、eslint、stylelint、husky、lint-staged、commitlintpnpmmonorepo+turborepo集成gulp+webpack构建esm、cjs和umdstorybook文档集成此系列不包含发布npm和构建CI流程。......
  • Springboot酒店管理系统b1g8z
    Springboot酒店管理系统b1g8z本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,客房类型,酒店简介,酒店客房,客房预定,入住安排,员工开题报告内容一、项目背景与意义在快速发展的旅游与酒店行业......
  • Springboot酒店管理系统35294
    Springboot酒店管理系统35294本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表 项目功能:用户,客房类型,酒店客房,菜品分类,菜品信息开题报告内容一、项目背景与意义随着旅游业的蓬勃发展,酒店行业作为旅游产......
  • 在Go中使用自定义类型与Swagger集成
    在Go语言中,自定义类型可以帮助我们更好地组织代码和增强可读性。在本篇博客中,我们将探讨如何创建一个自定义类型,并将其与Swagger文档集成,以便在API中正确序列化和展示。1.创建自定义类型首先,我们定义一个名为 RechargeType 的自定义类型。这个类型将用于表示不同的充值方式。......
  • 免费【2024】springboot 美食分享系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 【2024最新】基于springboot+vue的校园闲置物品交易网站平台lw+ppt
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • 【2024最新】基于springboot+vue的t校园闲置物品租售系统平台lw+ppt
    作者:计算机搬砖家开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码精品专栏:Java精选实战项目源码、Python精选实战项目源码、大数据精选实战项目源码......
  • JAVA开源项目 基于Vue和SpringBoot卫生健康系统
    博主说明:本文项目编号T076,文末自助获取源码\color{red}{T076,文末自助获......
  • JAVA开源项目 基于Vue和SpringBoot高校学科竞赛平台
    博主说明:本文项目编号T075,文末自助获取源码\color{red}{T075,文末自助获......