由浅入深Dubbo核心源码剖析SpringBoot整合使用

news2025/1/20 19:13:18

目录

  • 1 Dubbo与SpringBoot的整合
  • 2 公用RPC接口工程
  • 3. 服务端工程
  • 4. 消费端工程
  • 5. 工程调用验证


1 Dubbo与SpringBoot的整合

在这里插入图片描述

基于Zookeeper实现Dubbo与Spring Boot的集成整合,依赖导入

    <properties>
        <dubbo-version>2.7.8</dubbo-version>
        <spring-boot.version>2.3.0.RELEASE</spring-boot.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Apache Dubbo  -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-bom</artifactId>
                <version>${dubbo-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo-version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo-version}</version>
        </dependency>
        <!-- Dubbo核心组件 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <!--Spring Boot 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
        <!-- Zookeeper客户端框架 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!-- Zookeeper dependencies -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>${dubbo-version}</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

Dubbo采用2.7.8版本, Spring Boot采用的是2.3.0.RELEASE版本。

如果依赖下载出现问题, 可以指定具体的仓库:

<repositories>
    <repository>
        <id>apache.snapshots.https</id>
        <name>Apache Development Snapshot Repository</name>
        <url>https://repository.apache.org/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

2 公用RPC接口工程

为便于客户端与服务端的RPC接口引用, 这里对RPC接口做统一封装。

在这里插入图片描述

定义了一个订单服务接口, 用于测试验证。

public interface OrderService {

    /**
     * 获取订单详情
     * @param orderId
     * @return
     */
    String getOrder(Long orderId);
}

3. 服务端工程

  1. 工程结构

在这里插入图片描述

  1. POM依赖
    <dependencies>
        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo-version}</version>
        </dependency>
        <!-- Dubbo 核心依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <!-- 公用RPC接口依赖 -->
        <dependency>
            <groupId>com.oldlu</groupId>
            <artifactId>dubbo-spring-interface</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
  1. RPC服务接口
 @DubboService(version = "${dubbo.spring.provider.version}")
public class OrderServiceImpl implements OrderService {

    /**
     * 服务端口
     */
    @Value("${server.port}")
    private String serverPort;
    
    @Value("${dubbo.spring.provider.version}")
    private String serviceVersion;

    /**
     * 获取订单详情
     * @param orderId
     * @return
     */
    public String getOrder(Long orderId) {

       String result = "get order detail ,orderId="+orderId +",serverPort="+serverPort +",serviceVersion="+serviceVersion;
        System.out.println(result);
        return result;
    }
}

通过DubboService注解, 声明为RPC服务,version可以标识具体的版本号, 消费端需匹配保持一致。

  1. 工程配置
   # 服务端口
server.port=18081
# 应用程序名称
spring.application.name=dubbo-spring-provider
# Dubbo服务扫描路径
dubbo.scan.base-packages=com.oldlu

# Dubbo 通讯协议
dubbo.protocol.name=dubbo
# Dubbo服务提供的端口, 配置为-1,代表为随机端口 默认20880
dubbo.protocol.port=-1

## Dubbo 注册器配置信息
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
dubbo.spring.provider.version = 1.0.0

  1. Spring Boot启动程序
 @SpringBootApplication
@ComponentScan(basePackages = {"com.itheima"})
public class DubboSpringProviderApplication {

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

4. 消费端工程

  1. 工程结构

在这里插入图片描述

  1. POM依赖:
    <dependencies>
        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo-version}</version>
        </dependency>
        <!-- 公用RPC接口依赖 -->
        <dependency>
            <groupId>com.itheima</groupId>
            <artifactId>dubbo-spring-interface</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

  1. 消费端调用
 @Controller
@RequestMapping("/order")
public class OrderController {

    private final Logger logger = LoggerFactory.getLogger(getClass());


    /**
     * 订单服务接口
     */
    @DubboReference(version = "${dubbo.spring.provider.version}")
    private OrderService orderService;

    /**
     * 获取订单详情接口
     * @param orderId
     * @return
     */
    @RequestMapping("/getOrder")
    @ResponseBody
    public String getOrder(Long orderId) {
        String result = null;
        try {
            result = orderService.getOrder(orderId);
        }catch(Exception e) {
            logger.error(e.getMessage(), e);
        }
        return result;
    }

}

  1. 工程配置
# 服务端口
server.port=18084
#服务名称
spring.application.name=dubbo-spring-consumer
#服务版本号
dubbo.spring.provider.version = 1.0.0
#消费端注册器配置信息
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
  1. Spring Boot启动程序
@SpringBootApplication
@ComponentScan(basePackages = {"com.itheima"})
public class DubboSpringConsumerApplication {

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

5. 工程调用验证

  1. 启动ZK注册中心

  2. 启动服务端, 运行DubboSpringProviderApplication

  3. 启动消费端, 运行DubboSpringConsumerApplication

  4. 请求获取订单接口, 地址: http://127.0.0.1:18084/order/getOrder?orderId=1001

    调用成功:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMake初学笔记(一)

CMake初学笔记&#xff08;一&#xff09; CMake是什么CMake怎么实现跨平台CMake具体实践过程CMakeLists.txt编写快速入门常见函数例子 CMake是什么 跨平台编译工具&#xff0c;为了实现“write once, run everywhere”。 CMake怎么实现跨平台 开发者编写与平台无关的编译过…

opencv_c++学习(十八)

一、连通域分析 连通域分割原理&#xff1a; 邻域分为4邻域和8邻域。如上图所示。当使用连通域分割方法时&#xff0c;需要首先将图像进行二值化处理&#xff0c;在进行连通域的处理。右图为连通域分割两遍法的一个示意图&#xff0c;具体原理可以自行查询&#xff0c;这里只…

零基础学网络安全/web安全,一般人还真学不会

零基础学网络安全能不能学的会&#xff1f; 首先&#xff0c;肯定是可以学会的。 &#xff1f; 是不是和标题不一样&#xff1f;听我继续说 不过&#xff0c;难度会比有一些编程或者网络基础的人大一些。 网络安全需要天分努力才能成就大佬。而且&#xff0c;天分占比远比…

基于springboot+mybatis+mysql+vue学生选课管理系统

基于springbootmybatismysqlvue学生选课管理系统 一、系统介绍二、功能展示1.用户登陆2.课程列表(学生)3.选课(学生)4.查询成绩(学生)5.我的课程&#xff08;老师&#xff09;6.主页&#xff08;老师&#xff09;7.开设课程&#xff08;老师&#xff09;8.成绩管理&#xff08;…

七、jdbcTemplate

一、JdbcTemplate(概念和准备) 1.什么是JdbcTemplate Spring框架对JDBC进行封装&#xff0c;使用JdbcTemplate方便对数据库操作 2.准备工作 引入相关的jar包 在spring配置文件配置数据库连接池 <!--数据库连接池--> <bean id"dataSource" class"c…

图像处理:灰度图片线性截断拉伸

1. 为什么要拉伸 很多时候&#xff0c;灰度图片的灰度级较大&#xff0c;而像素值的分布比较集中&#xff0c;这就导致灰度级的利用率过低&#xff0c;从而导致图片的对比度很小&#xff0c;人眼的感官体验很不好&#xff0c;因此我们通常需要对原始的图像数据进行拉伸调整&…

​数据库原理及应用上机(实验六 视图的定义和维护)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;数据库原理及应用上机实验 ​ 目录 ✨一、实验目的和要求 ✨二、实验内容 ✨三、实验结果 ✨四&#xff0e;实验总结 &#x1f353;&#x1f353;前言&#xff1a; 数据库原理及应用上机实验报告的一个简单整理后期还会不断…

小白漂流记(如何自学网络安全?)

一、前言&#xff08;关于我&#xff09; 我算是“入行”不久的一个新人安全工作者&#xff0c;为什么是引号呢&#xff0c;因为我是个“半个野路子”出身。早在13年的时候&#xff0c;我在初中时期就已经在90sec、wooyun等社区一直学习、报告漏洞。后来由于升学的压力&#xf…

【Python入门篇】——Python中循环语句(for循环的嵌套应用)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

普洱突围“春茶江湖”,抖音电商「春茶普洱季」解锁好茶生意新增量

“越沉越香”&#xff0c;是普洱茶鲜明的味道符号。国内普洱茶市场热自2000年左右兴起&#xff0c;并逐渐在春茶市场上占据重要的一席之地。为顺应春茶季节打造“普洱爆品”&#xff0c;实现生意的应季增长&#xff0c;抖音电商也为品牌商家提供了更为完善的营销与经营解法。 …

极米科技发布新一代光源技术,投影行业要变天?

作者&#xff1a;坚白 2018年以来&#xff0c;在年轻人群的追捧下&#xff0c;此前主要应用于商用场景的投影仪&#xff0c;逐渐切换到家用场景&#xff0c;而且随着投影技术的持续改进&#xff0c;投影效果也不断提升&#xff0c;家用投影市场进入高速发展期。 但进入2022年…

微信小程序组件设计规范分享

WeUI是一套与微信原生视觉体验一致的基本样式库。微信官方设计团队为微信网页和微信小程序量身定制设计&#xff0c;使用户感知更加统一&#xff0c;包括button、cell、dialog、progress、toast、article、actionsheet、微信weui开发团队可以直接使用icon等各种元素。下面资源社…

基于postman测试接口(整套接口测试)(附视频教程加源码)

目录 可以解决的问题 开启控制台 单个测试尝试 使用请求结果当参数 打印结果(JSON) 自定义可视化结果 随机参数 测试用例连接 一键测试接口集合 从swagger导入接口 自定义全局变量 可以解决的问题 几百个接口人工测试接口过于繁杂大多测试无法使用请求结果当参数可以…

(转载)从0开始学matlab(第12天)—选择语句(if、switch、try/catch)

选择结构可以使 MATLAB 选择性执行指定区域内的代码 ( 称之为语句块 blocks)&#xff0c;而跳过其他区域的代码。选择结构在 MATLAB 中有三种具体的形式 :if 结构&#xff0c; switch 结构和try/catch 结构。 1 if 结构 1.1if语句的基本形式 if 结构的基本形式如下: 其…

菜鸡shader:L3三色环境光材质、阴影及光衰

三色环境光材质 先放上最终效果这里将环境光分为上中下三层&#xff0c;顶层是红色的&#xff0c;中间那层是绿色的&#xff0c;下层则是蓝色的。环境光遮蔽效果则是直接采样事先准备好的AO贴图。 首先是上层环境光&#xff1a; 这里我们只需要法线向量的第二个分量&#xf…

casbin基于RBAC模型实现权限管理

在casbin中权限都是基于匹配规则和访问控制模型实现的&#xff0c;除了上一章的ACL的实现方式&#xff0c;还有一个常用的访问控制模型RBAC。该模型带上了用户角色&#xff0c;基本满足大多数角色管理的系统。 在RBAC模型中多了一个角色的策略机制&#xff0c;其访问模型规则如…

消息中间件 - RabbitMQ篇之入门及进阶

这里写自定义目录标题 一. RabbitMQ简介1.1. 消息中间件1.1.1.什么是消息中间件1.1.2.消息中间件的传递模式1. 1.2.1 点对点1. 1.2.2 发布订阅模式 1.1.3 消息中间件种类1.1.4 消息中间件的作用 2. RabbitMQ介绍2.1.RabbitMQ的起源2.2.RabbitMQ的安装及简单使用 3. RabbitMQ的简…

Unity UI -- (6)增加Toggle和Slider

在前面的小节中&#xff0c;我们已经有了一个空的设置菜单。现在让我们来添加设置选项。 在本节最后&#xff0c;我们的设置菜单的样子参考如下&#xff1a; 添加一个音乐开关&#xff08;Toggle&#xff09; 现在让我们来增加一个toggle&#xff0c;让用户能够通过它来对场景的…

多功能语音芯片​NV040C的应用,为洗地机开辟新的应用领域

随着科技的快速发展&#xff0c;智能化和自动化已经成为了各个行业发展的主流趋势。传统的家庭洗拖工作日渐被各类洗地机、扫地机器人等取代&#xff0c;其中作为洗地机作为近几年家庭清洁的好物。近年来&#xff0c;不少洗地机厂商开始将语音芯片技术应用到产品中&#xff0c;…

多商户商城系统开发功能优势与选择技巧

电商行业的持续发展&#xff0c;让越来越多的商家企业开始选择入驻多商户商城&#xff0c;通过该系统不仅能够为消费者提供更加便捷良好的购物体验&#xff0c;而且也能够为企业提供一个高效稳定的电商平台&#xff0c;可以说是未来电商行业发展的重要趋势。那么多商户商城系统…