干翻Dubbo系列第十四篇:Dubbo协议基于SpringBoot规范化开发

news2025/1/17 13:45:36

文章目录

文章说明

一:版本控制

二:共有依赖声明于父项目

三:创建共有API

1:定义公共接口

2:定义Bean

四:创建Provider

1:引入公共API

2:创建实现类

3:定义启动类

4:定义配置文件

5:启动成功之后的现象

五:创建Consumer

 1:引入公共API

2:编写配置文件

3:定义启动类


文章说明

本文内容整理自《孙哥说Dubbo系列视频课程》,孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频,或者直接添加老师微信号suns45与他直接联系

安装完zookeeper之后,我们需要规范下开发, 我们之前基于 Spring方式展开介绍,好处就是完整了体会了调用关系不至于封装的那么厉害,但是这个跟主流的SpringBoot的方式还是有很大区别的。

同样是基于SpringBoot开发,前端研究的时候, Springboot的父项目仍然是SpringBoot项目,因为实际的开发过程中SpringBoot的父项目不一定是SpringBoot项目,有可能是任意形式的父项目。

本次我们构建项目就采用这种标准的形式,创建一个maven工程,删除src。在pom.xml里边设置我们所需要依赖的jar包的版本。在父项目的dependencyManagemeng中配置各种dependency选项,仅仅是对依赖版本进行了锁定,并不是对依赖进行了引入。如何证明这一点,只需要打开右侧maven的悬浮窗口刷新一下,看看有没有依赖引入进来即可。

一:版本控制

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <dubbo.version>3.1.10</dubbo.version>
        <spring-boot.version>2.7.12</spring-boot.version>
    </properties>

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

            <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>

我们到这里仅仅是完成了依赖版本的锁定。

二:共有依赖声明于父项目

同时,我们需要严格注意官方为我们提供的zookeeper和Dubbo版本依赖配对关系。


    <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>

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

        <!--zk注册中心 需要的依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.8.1</version>
        </dependency>
    </dependencies>

这个时候,我们可以看一下maven的悬浮窗口里边,真正的有了maven依赖这就代表了dependency才是真正的依赖导入窗口。

三:创建共有API

1:定义公共接口

2:定义Bean

四:创建Provider

1:引入公共API

    <dependencies>
        <dependency>
            <groupId>com.suns</groupId>
            <artifactId>dubbo-protocol-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

2:创建实现类

@DubboService
public class UserServiceImpl implements UserService {
    @Override
    public boolean login(String name, String password) {
        System.out.println("UserServiceImpl.login name " + name + " password is " + password);
        return false;
    }
}

3:定义启动类

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

4:定义配置文件

spring:
  application:
    name: DUBBO-PROTOCOL-PROVIDER

dubbo:
  protocol:
    name: dubbo
    port: -1
  registry:
    address: zookeeper://127.0.0.1:2181

值得一提的是这里的注册中心address后边的zookeeper这个协议就代表了我们要使用zookeeper作为我们的注册中心。

经过以上这样的处理之后,就可以让Dubbo扫描我们的impl并且发布成为一个RPC了。

5:启动成功之后的现象

启动提供者之前,必须要先启动我们的注册中心。

启动成功我们的Provider之后,对应的export和Register日志看到之后,我们可以打开我们的PrettyZoo连接上我们的zookeeper可以看见根节点下多了一个dubbo一个Services节点。这就代表注册起作用了。后续dubbo和Services节点会在后续进行介绍。

五:创建Consumer

 1:引入公共API

    <dependencies>
        <dependency>
            <groupId>com.suns</groupId>
            <artifactId>dubbo-protocol-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

2:编写配置文件

spring:
  application:
    name: DUBBO-PROTOCOL-CONSUMER
dubbo:
  registry:
    address: zookeeper://127.0.0.1:2181

  application:
    qos-enable: false

3:定义启动类

    @DubboReference
    private UserService userService;

    @Test
    void test1() {
        boolean ret = userService.login("xiaohei", "123456");
        System.out.println("ret = " + ret);
    }

至此,我们对应Dubbo协议的使用,如何引入注册中心,如何基于SpringBoot标准化开发就介绍完了。

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

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

相关文章

Mac 如何判断下载Mac with Intel Chip 还是 Mac with Apple Chip

如下图&#xff0c;当我们在 Mac系统 下载客户端时&#xff0c;有两种选择&#xff1a;Mac with Intel Chip 、 Mac with Apple Chip 如何判断要下载哪一种&#xff1f; 需要判断本机Mac是在Inter芯片还是Apple芯片上运行的。方法如下&#xff1a; 点击屏幕左上角Apple标志&a…

DVWA失效的访问控制

失效的访问控制&#xff0c;可以认为是系统对一些功能进行了访问或权限限制&#xff0c;但因为种种原因&#xff0c;限制并没有生效&#xff0c;造成失效的访问控制漏洞,比如越权等 这里以DVWA为例&#xff0c;先访问低难度的命令执行并抓包 删除cookie&#xff0c;并在请求头…

Ei Scopus双检索 | 2024年第二届绿色建筑国际会议(ICoGB 2024)

会议简介 Brief Introduction 2024年第二届绿色建筑国际会议(ICoGB 2024) 会议时间&#xff1a;2024年5月22日-24日 召开地点&#xff1a;意大利米兰 大会官网&#xff1a;www.icogb.org ICoGB 2024将围绕“绿色建筑”的最新研究领域而展开&#xff0c;为研究人员、工程师、专家…

Linux 进程基础概念-进程状态、进程构成、进程控制

Linux 进程 参考&#xff1a; 「linux操作系统」进程的切换与控制到底有啥关系&#xff1f; - 知乎 (zhihu.com)&#xff0c;Linux进程解析_deep_explore的博客-CSDN博客&#xff0c;腾讯面试&#xff1a;进程的那些数据结构 - 知乎 (zhihu.com)&#xff0c;如何在Linux下的进…

百万级并发IM即时消息系统(3)配置数据初始化和前后端交互

04_配置数据初始化及前后端交互_哔哩哔哩_bilibili 1.配置文件 创建一个config文件夹以及一个app.yaml配置文件。 该文件专门存放一些关键配置&#xff0c;如mysql DNS路径和redis的addr账号密码等。 后期可以创建一个工具包和一些初始化方法&#xff0c;专门用来加载这些配…

密码算法、密钥体系---安全行业基础篇1

一、密码算法 密码算法是一种数学和计算方法&#xff0c;用于保护数据的机密性和安全性。不同的密码算法使用不同的数学原理和技术来加密和解密数据。以下是一些常见的密码算法类型&#xff1a; 1. **对称密码算法&#xff1a;** 特点&#xff1a;相同的密钥用于加密和解密数…

14:00面试,14:08就出来了,问的问题有点变态

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

雅思写作 三小时浓缩学习顾家北 笔记总结(三)

目录 顾家北饥饿网100个句子翻译 "Heritage sites threatened by urban development" "Heritage sites are threatened by urban development." We should not ignore face-to-face communication. We cannot ignore face-to-face communication. So…

电商项目part09 分布式事务SeataMQ可靠消息

分布式事务 在微服务架构中&#xff0c;完成某一个业务功能可能需要横跨多个服务&#xff0c;操作多个数据库。这就涉及到到了分布式事务&#xff0c;需要操作的资源位于多个资源服务器上&#xff0c;而应用需要保证对于多个资源服务器的数据操作&#xff0c;要么全部成功&…

数据统计汇总聚合

一些方法 特殊&#xff1a;数据聚合 可加入排序

Leetcode: 1. 两数之和 【题解超详细】

前言 有人夜里挑灯看花&#xff0c;有人相爱&#xff0c;有人夜里开车看海&#xff0c;有人leetcode第一题都做不出来。 希望下面的题解可以帮助你们开始 你们的 leetcode 刷题 的 天降之路 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…

Linux配置ADSL链接

在Linux中配置ADSL链接&#xff0c;可以按照以下步骤进行&#xff1a; 安装rp-pppoeconf工具&#xff0c;这个工具可以通过终端窗口使用。运行命令“rp-pppoeconf”来配置ADSL链接。终端窗口会显示一个向导模式&#xff0c;用于配置ADSL链接。输入用户名和密码。这些信息是用来…

强强联手 | 大势智慧与山维科技签署战略合作协议

8月30日&#xff0c;武汉大势智慧科技有限公司&#xff08;以下简称“大势智慧”&#xff09;与北京山维科技股份有限公司&#xff08;以下简称“山维科技”&#xff09;达成战略合作。双方将聚焦新型基础测绘建设与实景三维中国领域&#xff0c;携手为广大用户提供数据采集、生…

ShardingJDBC——分库分表实践

摘要 本文主要介绍分表分库&#xff0c;以及SpringBoot集成基于ShardingJDBC的单库分表实践。 一、Sharding-JDBC Sharding-JDBC是ShardingSphere的第一个产品&#xff0c;也是ShardingSphere的前身。 它定位为轻量级Java框架&#xff0c;在Java的JDBC层提供的额外服务。它使…

stable diffusion实践操作-embedding(TEXTUAL INVERSION)

本文专门开一节写图生图相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 可以理解为提示词的集合&#xff0c;可以省略大量的提示词。后缀safetensors&#xff0c;大小几十kb 正文 1、功能 可以理解为提示词的集合&#xff0…

IntelliJ IDEA创建Web项目并使用Web服务器----Tomcat

&#x1f3c6;IntelliJ IDEA创建Web项目并使用Web服务器----Tomcat 以下是本篇文章正文内容&#xff0c;下面案例可供参考&#xff08;提示&#xff1a;本篇文章属于原创&#xff0c;请转发或者引用时注明出处。&#xff09;&#xff0c;大家记得支持一下&#xff01;&#xff…

【权限提升-Windows提权】-UAC提权之MSF模块和UACME项目-DLL劫持-不带引号服务路径-不安全的服务权限

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的&#xff1f; 后台权限&#xff0c;网站权限&#xff0c;数据库权限&#xff0c;接口权限&#xff0c;系统权限&#xff0c;域控权限等 2、以上常见权限获取方法简要归类说明&#xff1f; 后台权限&#xff1a;SQL注入,数…

云原生架构-架构师之路(十九)

云原生架构内涵 云原生架构 基于云原生技术&#xff0c;指将 云应用中的非业务代码部分进行最大化的剥离&#xff0c;让 云设施接管项目中大量非功能特性&#xff08;如弹性、韧性、安全、可观测性和灰度等&#xff09;。把质量属性 和 业务功能完全分离&#xff0c;我们自己的…

美创科技获通信网络安全服务能力评定(应急响应一级)认证!

近日&#xff0c;中国通信企业协会公布通信网络安全服务能力评定2023年第一批获证企业名单。 美创科技获得应急响应一级资质&#xff0c;成为2023年第一批获证企业之一&#xff01; 通信网络安全服务能力评定是对通信网络安全服务单位从事通信网络安全服务综合能力的评定&#…

死锁 银行家算法

死锁 产生死锁的四个条件 资源互斥&#xff1a;资源是独占的且排他使用&#xff0c;进程互斥使用资源&#xff0c;即任意时刻一个资源只能给一个进程使用&#xff0c;其他进程若申请一个资源&#xff0c;而该资源被另一进程占有时&#xff0c;则申请者等待直到资源被占有者释…