springboot+dubbo+zookeeper整合

springboot整合dubbo,用zookeeper做通信。具体步骤如下:

步骤一:zookeeper环境

1、进入官网下载zookeeper安装包

     地址:https://zookeeper.apache.org/releases.html

2、解压安装包,并找到解压后的 conf 文件夹。

      复制zoo_sample.cfg 名字为zoo.cfg

      修改zoo.cfg 的dataDir路径,并增加dataLogDir 。改成自己需要的路径即可

     

3、点击bin目录下的 zkServer.cmd 启动zookeeper

 

步骤二:服务环境

1、搭建父子项目

       搭建maven项目或者springboot项目,配置文件改成如下所示,并引入dubbo的配置:

       不用配置打包信息,否则子项目都会集成。

<modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
    </parent>

    <groupId>com.xiang</groupId>
    <artifactId>dubbo-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <springboot-version>2.4.3</springboot-version>
        <dubbo-version>2.7.8</dubbo-version>
        <curator-version>2.8.0</curator-version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springboot-version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo-version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>${curator-version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>${curator-version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

2、搭建公共子模块(dubbo-api)

        创建子模块,这里只提供接口,之后会有provider去实现这个接口中的方法。

        创建 service包,写UserService接口,并提供方法,代码如下:

public interface UserService {

    Integer getCount();
}

         pom配置文件如下:

<parent>
        <artifactId>dubbo-parent</artifactId>
        <groupId>com.xiang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-api</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${curator-version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${curator-version}</version>
        </dependency>
    </dependencies>

 

3、搭建生产者(dubbo-provider)

       生产者是提供方法者,这个模块会引用dubbo-api模块并实现其提供的功能(maven引入)。

      代码如下: 使用了DubboService注解

@DubboService
public class UserServiceImpl implements UserService {


    @Override
    public Integer getCount() {
        return 22;
    }
}

       properties配置如下:

server.port=1001

dubbo.application.name=DUBBO-PROVIDER
#协议名称
dubbo.protocol.name=dubbo
#协议端口
dubbo.protocol.port=20880
#注册地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#服务类包目录
dubbo.scan.base-packages=com.xiang.dubbo.service.impl

     其中dubbo.scan.base-packages  是扫描包使用的。在生产者中主要扫描是否有  @DubboService 注解。在消费者中,主要扫描是否有 @DubboReference 注解。

     指定扫描包的位置总共有三种方式:

     a.dubbo.scan.base-packages =“xxx”  配置文件配置

     b.@EnableDubbo

          也是启动dubbo,如果使用的是这个注解,dubbo会扫描当前注解所在包以及以下的包。

     c.@DubboComponentScan("xxx")

         该注解中与配置文件注解一致,都会扫描该项目下指定的文件路径。

 

         pom配置如下:

<parent>
        <artifactId>dubbo-parent</artifactId>
        <groupId>com.xiang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-provider</artifactId>

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

  打包配置,可按需修改:

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>  <!--打包插件-->
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!-- 如果没有该配置,devtools不会生效 -->
                    <mainClass>com.xiang.dubbo.DubboProviderApplication</mainClass><!-- 指定该Main Class为全局的唯一入口 -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal> <!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!--在这里修改版本-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.4.3</version>
            </plugin>
            <!---->
        </plugins>
        <finalName>dubbo-provider</finalName>
    </build>

 

4、搭建消费者(dubbo-consumer)

      消费者是使用生产者提供的功能,这个模块会引用dubbo-api模块并实现其提供的功能(maven引入)。

      代码如下:主要使用了@DubboReference 注解

@RestController
public class UserController {

    @DubboReference
    private UserService userService;

    @RequestMapping("getCount")
    public Integer getCount() {
        return userService.getCount();
    }
}

       properties配置文件:

server.port=1002

dubbo.application.name=DUBBO-CONSUMER
#协议名称
dubbo.protocol.name=dubbo
#协议端口
dubbo.protocol.port=20880
#注册地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
#服务类包目录
dubbo.scan.base-packages=com.xiang.dubbo.controller

       pom配置文件代码与provider一致。

 

5、测试

 启动zookeeper

 启动生产者

 启动消费者

 浏览器中输入:http://localhost:1002/getCount  得到正常结果。

 

补充:

可以下载zookeeper连接客户端(ZooInspector),查看zookeeper的生产消费信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值