Dubbo 2.7 结合Spring boot搭建简单demo

Dubbo 2.7.8 结合Spring boot搭建简单demo

记录学习dubbo搭建demo,使用的dubbo版本2.7.8,zookeeper版本3.5.8,Spring boot版本2.3.7.RELEASE。

安装zookeeper

安装环境是win10下的wsl2安装的ubuntu18,之前恰好尝试给安装好了,简单测试了下能正尝试使用,和外网也能通,用虚拟机或者其他linux环境也是一样。
大致步骤就是下载->解压->配置->运行:

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8.tar.gz

将包移动到安装目录后解压tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz ,解压后目录:
zookeeper 目录
简单配置,将sample配置复制一份cp zoo_sample.cfg zoo.cfg,修改下内容,建个目录存放数据,指定数据目录,配置项为dataDir。需要注意的是,安装的这个版本是携带有zookeeper admin的,默认启动为8080端口,也可以将其关闭或者修改端口。因为我的wsl是和宿主机共用端口的,之前未注意,端口冲突不正常才发现,zookeeper adminServer官方文档,我选择了修改下端口,配置如图在这里插入图片描述
通过命令nohup ./bin/zkServer.sh start 静默启动,通过./bin/zkServer.sh status查看启动状态,除此之外stop停止、restart重启也可以,可通过-h查看支持的命令参数。如status看到类似信息则启动成功,或者查看2181端口是否处于监听状态也可判定。./bin/zkServer.sh status 结果
至此,zookeeper安装启动已完成,通过ifconfig查看本机ip用于连接zookeeper即可,如有防火墙之类的记得开下端口。

dubbo admin

dubbo admin是可选的,地址: https://github.com/apache/dubbo-admin ,下载代码到本地后,根据文档配置启动就好,README文档步骤启动就好,然后界面如下:
dubbo admin
根据配置中可知,默认登录账号密码皆为root。如果这个能启动成功,说明zookeeper正常,配置正确,那在后续步骤出问题时可减少排查时间。

搭建服务

dubbo服务需要服务提供者和服务消费者,且都需要连接zookeeper和使用dubbo依赖,所以项目结构可以类似这样:
项目结构
provider需要实现api定义的功能接口,consumer需调用api接口,所以把接口提取成dubbo-demo-api项目,然后在provider和consumer中引入即可。
dubbo 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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fih.study</groupId>
    <artifactId>dubbo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>dubbo</name>
    <description>Demo project for Spring Boot</description>

    <modules>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
        <module>dubbo-demo-api</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <!--<spring-boot.version>2.1.13.RELEASE</spring-boot.version>-->
        <dubbo.version>2.7.8</dubbo.version>
    </properties>

    <dependencies>
        <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-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

        </plugins>
    </build>

</project>

根据需要可删减非必要依赖。

服务提供者

provider 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>
    <parent>
        <groupId>com.fih.study</groupId>
        <artifactId>dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!--<relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;-->
    </parent>
    <groupId>com.fih.study</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.fih.study</groupId>
            <artifactId>dubbo-demo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

由于依赖在parent都引入了,所以只需引入api即可。

demo-api 只需定义会重用的api接口以及对应的dto/vo即可,如:
api
provider需实现api提供服务,代码如下:
provider service
注解使用的是@DubboService(version = "1.0.0") ,在老版本中是dubbo下的service。
@service
启动类DubboProviderApplication中再加上注解@DubboComponentScan(basePackages = "com.fih.study.dubboprovider.provider")
application.properties配置:

server.port=9001
dubbo.application.id=dubo-study-provider
dubbo.application.name=dubo-study-provider
dubbo.registry.address=zookeeper://172.27.253.114:2181
dubbo.registry.protocol=zookeeper
dubbo.registry.timeout=10000

dubbo.protocol.name=dubbo



更多注解则需后续通过查阅文档根据需要添加或删除,然后启动服务,需注意的是dubbo.registry.timeout该配置是设置连接注册中心超时时间,默认为3s,但在我的环境下无法启动,改成10s后启动成功,控制台输出如图:
provider启动结果
通过dubbo admin 可看到服务已注册成功,还可以通过测试按钮简单测试下功能是否正常。provider success

服务消费者

consumer 的pom.xml跟provider基本一样,引入了spring-boot-starter-web。
主要代码:

package com.fih.study.dubboconsumer.controller;

import com.fih.study.dubbodemoapi.api.HelloWorldApi;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @DubboReference(version = "1.0.0")
    private HelloWorldApi helloWorldApi;

    @GetMapping("/hello")
    public String hello(String name) {

        return helloWorldApi.sayHello(name);
    }
}

application.properties配置也基本相同

server.port=9002
dubbo.application.id=dubbo-study-consumer
dubbo.application.name=dubbo-study-consumer
dubbo.registry.address=zookeeper://172.27.253.114:2181
dubbo.registry.protocol=zookeeper
dubbo.registry.timeout=10000

dubbo.protocol.name=dubbo

启动服务,调用接口,输出正常,consumer
至此,此次demo已完成,后续学习将基于demo逐渐深入。其实 官方是有提供dubbo的示例代码,dubbo-sample,只是有点多,对于刚开始准备学习dubbo和搭建简单demo反而无从下手,不知道怎么看,再者因为习惯了用springboot搭建项目,所以就自己尝试下了,边找资料,边尝试,大部分也是参考其余博客做的,只是每个人遇到的问题也不一样,所以还是记录下自己的步骤好了。
完整代码

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装Apache Dubbo: 1. 下载Dubbo的源代码或者二进制包,解压到任意目录下; 2. 配置Dubbo的环境变量,将Dubbo的bin目录添加到系统的PATH环境变量中; 3. 验证Dubbo是否安装成功,打开终端,运行dubbo -v命令,如果显示Dubbo的版本号,则说明安装成功。 配置Spring Boot: 1. 创建Spring Boot项目,可以在https://start.spring.io网站上选择需要的依赖来创建项目; 2. 添加Dubbo的依赖,在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>x.x.x</version> </dependency> ``` 其中,x.x.x是Dubbo的版本号; 3. 配置Dubbo的相关属性,在application.properties文件中添加以下配置: ``` # Dubbo application name dubbo.application.name=dubbo-demo # Dubbo registry address dubbo.registry.address=zookeeper://127.0.0.1:2181 # Dubbo protocol dubbo.protocol.name=dubbo dubbo.protocol.port=20880 ``` 其中,dubbo.application.name是Dubbo应用的名称,dubbo.registry.address是Dubbo注册中心的地址,dubbo.protocol.name是Dubbo使用的协议名称,dubbo.protocol.port是Dubbo使用的协议端口号。 配置Spring Cloud: 1. 添加Dubbo的依赖,在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-dubbo</artifactId> <version>x.x.x</version> </dependency> ``` 其中,x.x.x是Dubbo的版本号; 2. 配置Dubbo的相关属性,在application.properties文件中添加以下配置: ``` # Dubbo application name dubbo.application.name=dubbo-demo # Dubbo registry address dubbo.registry.address=zookeeper://127.0.0.1:2181 # Dubbo protocol dubbo.protocol.name=dubbo dubbo.protocol.port=20880 ``` 其中,dubbo.application.name是Dubbo应用的名称,dubbo.registry.address是Dubbo注册中心的地址,dubbo.protocol.name是Dubbo使用的协议名称,dubbo.protocol.port是Dubbo使用的协议端口号。 配置Maven: 1. 在pom.xml文件中添加Dubbo的依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>x.x.x</version> </dependency> ``` 其中,x.x.x是Dubbo的版本号; 2. 在pom.xml文件中添加Dubbo插件: ``` <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.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.xxx.xxx.xxx.MainClass</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>com.alibaba</groupId> <artifactId>dubbo-maven-plugin</artifactId> <version>x.x.x</version> <configuration> <fork>true</fork> <mainClass>com.xxx.xxx.xxx.MainClass</mainClass> </configuration> </plugin> </plugins> ``` 其中,x.x.x是Dubbo的版本号,<mainClass>com.xxx.xxx.xxx.MainClass</mainClass>是Dubbo应用的启动类。 以上就是在Spring BootSpring Cloud和Maven中配置Dubbo的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值