springboot集成dubbo以及zookeeper

springboot结合zookeeper以及dubbo

今天我们来实现一个简单的分布式的案例,实现provider-api-consumer

  1. 首先,创建普通maven项目,将src目录删除即可

  2. 然后创建一个名为rpc-api的maven module
    springboot集成dubbo以及zookeeper_第1张图片
    创建好之后导入dubbo以及zookeeper的相关依赖(版本都是使用人数比较多的,使用最新版本出现了很多问题,经过修改依旧不行,最后降低版本发现相关问题不再发生)

<dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
            <version>2.7.8version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4jgroupId>
                    <artifactId>slf4j-log4j12artifactId>
                exclusion>
            exclusions>
        dependency>
        
        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-frameworkartifactId>
            <version>2.12.0version>
        dependency>
        
        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-recipesartifactId>
            <version>2.12.0version>
        dependency>

        
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.5.7version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4jgroupId>
                    <artifactId>slf4j-log4j12artifactId>
                exclusion>
            exclusions>
        dependency>
        
        <dependency>
            <groupId>com.101tecgroupId>
            <artifactId>zkclientartifactId>
            <version>0.10version>
        dependency>

导入好依赖之后编写共有的接口IService

public interface IUserService {
    User getUserById(int id);
}

以及数据库(本项目未导入sql相关依赖,所以使用的是虚拟数据)需要使用到的pojo类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
    private int age;
    private String name;
}

项目结构如图所示
springboot集成dubbo以及zookeeper_第2张图片
3.再创建一个名为rpc-provider的springboot项目

创建好之后先导入rpc-api再编辑application.properties,如下所示

# 应用名称
spring.application.name=rpc-provider
# 应用服务 WEB 访问端口
server.port=8000
#Dubbo provider configuration
dubbo.application.name=rpc-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描应用服务
dubbo.scan.base-packages=com.bing.service

最后编写UserService,如下所示


@Component//这个是spring的
@Service(interfaceClass = IUserService.class)//这个是dubbo的
public class UserService implements IUserService{
    @Override
    public User getUserById(int id) {
        User user = new User(id,"小华");
        return user;
    }
}

项目结构如下所示
springboot集成dubbo以及zookeeper_第3张图片
4.最后创建一个rpc-consumer的springboot 的module项目
依旧导入rpc-api依赖再修改application.properties文件

# 应用名称
spring.application.name=rpc-consumer
# 应用服务 WEB 访问端口
server.port=8001

dubbo.application.name=rpc-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181

再编写UserController

@RestController
public class UserController {
    //远程调用,这是dubbo的
    @Reference
    IUserService iUserService;

    @RequestMapping("/getUserById")
    public User getUserById(int id){
        return iUserService.getUserById(id);
    }
}

项目结构如下
springboot集成dubbo以及zookeeper_第4张图片
5.那么有了provider以及consumer,那么我们就可以进行代码的test了
首先整个项目的结构如图所示
springboot集成dubbo以及zookeeper_第5张图片

在开启测试前,我们一定要确保zookeeper以及启动了,如果不知道如何安装zookeeper的,我上一篇博客以及谈到了,可以先去了解了解

那么在这里先启动服务端以及客户端,启动完成之后我们再先启动rpc-provider项目

以下是idea控制台页面(state为connected)以及zookeeper服务端(表示rpc-provider已经向zookeeper注册成功)页面
springboot集成dubbo以及zookeeper_第6张图片
springboot集成dubbo以及zookeeper_第7张图片
再启动rpc-consumer,idea控制台页面如下所示
springboot集成dubbo以及zookeeper_第8张图片
那么,我们写了一个restcontroller,所以我们打开浏览器,输入http://localhost:8001/getUserById?id=1
浏览器效果如图所示
springboot集成dubbo以及zookeeper_第9张图片
那么过程可能会遇到许多问题,最好解决的办法就是导入的依赖千万不要是最新版本,毕竟作为初学者,首先需要弄懂的是原理,等到了解之后再去使用最新版本,为生态做出贡献。

以上项目代码会上传至个人github,点击即可获取下载项目地址

你可能感兴趣的:(Spring,dubbo,java,java-zookeeper)