Dubbo入门案例

Dubbo

学习地址:Dubbo3 简介_w3cschool

01-Dubbo入门案例

​ 我们先来新建一个Dubbo的小案例来体验一下Dubbo的使用,我们先来创建一个springboot的项目。

1.1-zookeeper下载启动

​ 在编写我们的入门案例之前,我们需要先去下载一个注册中心,我们这里选择zookeeper,接下来介绍windows和Linux下载zookeeper。我们先去到清华大学镜像网址:Index of /apache/zookeeper (tsinghua.edu.cn);选择自己需要的对应版本。

​ zookeeper的详解可以去看看这篇文章:Zookeeper------简介 & 下载 & Linux下配置安装启动 & 解读相关配置参数_linux启动zk是什么用-CSDN博客

1.1.1-Linux系统下载

​ 在Linux下执行如下命令【注:这里根据自己的版本进行下载和解压】

sh 复制代码
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz

可以看到我们现在下载成功了,下载成功后对其进行解压,执行如下命令

sh 复制代码
tar -xzvf apache-zookeeper-3.7.2-bin.tar.gz

​ 解压成功后,我们可以选择给zookeeper重新命名一下:

sh 复制代码
mv apache-zookeeper-3.7.2-bin zookeeper-3.7.2

​ 进入到zookeeper的安装路径,使用mkdir zkData命令创建zkData的目录,这个目录是专门用来存放 zookeeper 相关的数据节点信息,创建完成后,进入到zookeeper的配置文件

sh 复制代码
vim conf/zoo_sample.cfg

​ 将dataDir的目录改为我们刚刚创建的目录

​ 我们将配置文件修改后,我们将配置文件复制一份,并改名为zoo.cfg,命令如下

sh 复制代码
cp zoo_sample.cfg zoo.cfg

修改完成后我们就可以启动zookeeper了,进入到zookeeper的bin目录下【注:必须得进到bin目录下】,使用如下命令启动zookeeper

sh 复制代码
./zkServer.sh start

​ 使用ps -ef|grep zookeeper命令就可以看到如下内容,说明我们zookeeper启动成功了

1.2-父模块-DubboDemo

创建一个父模块,DubboDemo

创建之后,将如下内容粘贴如pom.xml中,如果自己导入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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>DubboDemo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>provider</module>
        <module>consumer</module>
        <module>provider-server</module>
    </modules>

    <!-- Spring Boot的父依赖,定义了Spring Boot版本和其他依赖的版本管理 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
    </parent>


    <!-- 依赖管理 -->
    <dependencies>
        <!--导入依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!--zkclient-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--解决日志冲突-->
        <!--引入zookeeper-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <!--解决 java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <!-- 构建配置 -->
    <build>
        <plugins>
            <!-- Spring Boot的Maven插件,用于打包成可执行的jar文件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

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

</project>

​ 创建完父项目后,可以把父项目中的src模块删掉

1.3-接口模块-provider-server

​ 在父项目下创建provider-server模块,并定义service层的接口,如下图所示

​ 创建完provider-server之后,我们需要把该模块打包到本地,先在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>DubboDemo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <packaging>pom</packaging>

    <!-- 这里的groupId和artifactId填写自己的包名和组名 -->
    <groupId>com.lhl</groupId>
    <artifactId>provider-server</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

1.4-提供者模块-provider

​ 在父项目下新建子模块provider,如图所示,这个controller包入门案例不必理会。

provider的pom文件需要依赖我们刚刚打包的provider-server,这是我的依赖如下【可以不一样】

xml 复制代码
	<dependency>
        <groupId>com.lhl</groupId>
        <artifactId>provider-server</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

​ 添加application.yml文件内容如下:

yml 复制代码
server:
  port: 8081
dubbo:
  application:
    # 注册的应用名
    name: dubbo-springboot-provider-8082
  protocol:
    # 协议名称
    name: dubbo
    # port -1表示端口号随机
    port: -1
  registry:
  	# zookeeper地址
    address: zookeeper://自己zookeeper地址:2181
zookeeper:
  #zookeeper请求超时时间
  request-timeout: 10000

HelloServiceImpl具体代码如下

java 复制代码
// 注意:这个Service要选择dubbo包下的,这个Service的意思是将这个service实现注册到dubbo中
@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello() {
        return "hello8081";
    }
}

ProviderApplication类具体代码如下:

java 复制代码
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class);
    }
}

1.5-消费者模块-consumer

​ consumer的目录如下:

​ 在父模块下同样创建consumer模块,同样添加如下依赖

xml 复制代码
	<dependency>
        <groupId>com.lhl</groupId>
        <artifactId>provider-server</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

​ 添加application.yml配置文件

yml 复制代码
server:
  port: 8080
dubbo:
  application:
    # 注册的应用名
    name: dubbo-springboot-consumer
  protocol:
    # 协议名称
    name: dubbo
    # port -1表示端口号随机
    port: -1
  registry:
    # zookeeper地址
    address: zookeeper://159.75.134.127:2181
zookeeper:
  request-timeout: 10000

HelloController的内容如下:

Java 复制代码
@RestController
public class HelloController {

    // 这个注解是用来获取远程实现类的
    @Reference
    HelloService helloService;

    @RequestMapping("/hello")
    public String sayHello(){
        return helloService.sayHello();
    }
}

1.6-启动项目验证

​ 最后我们先运行provider模块,启动完成后,我们再启动consumer模块,最后我们在访问127.0.0.1:8080/hello,控制台打印hello8081,入门案例完成。如图所示

相关推荐
m0_5883833217 小时前
进阶SpringBoot之 Dubbo-admin 安装测试
spring boot·后端·dubbo
HHoao2 天前
Flink Task 日志文件隔离
java·flink·dubbo
会洗碗的CV工程师4 天前
828华为云征文 | 使用Flexus X实例搭建Dubbo-Admin服务
java·linux·服务器·华为云·dubbo
Dola_Pan8 天前
Linux文件IO(一)-open使用详解
java·linux·dubbo
AI大模型训练家14 天前
OpenAI的API调用之初探,python调用GPT-API(交互式,支持多轮对话)
人工智能·python·gpt·学习·程序人生·dubbo·agi
DEARM LINER15 天前
dubbo 服务消费原理分析之应用级服务发现
spring boot·架构·服务发现·dubbo·safari
CopyLower15 天前
Dubbo 与 Zookeeper 在项目中的应用:原理与实现详解
分布式·zookeeper·dubbo
Flying_Fish_roe20 天前
Dubbo 安全方面措施
安全·dubbo
Flying_Fish_roe21 天前
Dubbo缓存
spring·缓存·dubbo