当前位置:   article > 正文

搭建springboot+dubbo+zookeeper的分布式demo就是这么简单_zkspringboot-demo

zkspringboot-demo

一、架子搭建

环境:

本地:springboot-2.2.6 + jdk1.8 + dubbo-2.7.3
服务器docker + zookeeper:latest

我们先新建一个空项目,然后分别引入

  • api
  • customer
  • provider

三个模块,以下,贴出api模块构建过程:
1、新建空项目
在这里插入图片描述
在这里插入图片描述
2、创建api模块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们默认先引入web依赖
在这里插入图片描述
3、创建customerprovider模块,过程同上,结构图如下:
在这里插入图片描述

二、依赖引入

api模块依赖不动,provider——>pom.xml:加入以下内容

<!--导入公共接口模块-->
        <dependency>
            <groupId>com.test</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>

        <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.13</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

customer——>pom.xml添加同上

三、properties配置

同样的api不用动,customer模块的配置如下:

#dubbo configuration
dubbo.application.name=consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://你的ip:2181

# provider使用8080
server.port=8081
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

provider模块:

dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://你的ip:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# 自动扫描
dubbo.scan.base-packages=com.test.provider.service
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

四、编写测试

1、api编写服务接口

package com.test.api.service;

/**
 * 公共接口
 */
public interface TicketService {
    public String getTicket();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、provider编写服务接口实现类

package com.test.provider.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.test.api.service.TicketService;
import org.springframework.stereotype.Component;

@Component
@Service(version = "1.0.0" ,interfaceClass = TicketService.class) // 将服务暴露
public class TicketServiceImpl implements TicketService{

    @Override
    public String getTicket() {
        return "厉害了,我的国";
    }
}
// 注意:@Service注解的import不是平时spring用的那个
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3、customer获取注册的服务,并使用

package com.test.customer.controller;

import com.test.api.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    // 获取服务
    @Reference(version = "1.0.0")
    private TicketService ticketService;

    @GetMapping("/ticket")
    public String hello(){
        String ticket = ticketService.getTicket();
        System.out.println("买到票了" + ticket);
        return "success";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

4、进行测试

  • 将provider的主类运行起来,然后运行customer的主类:
    在这里插入图片描述
    在这里插入图片描述
  • 在本地浏览器上输入:http://localhost:8081/ticket,显示如下:
    在这里插入图片描述
    同时查看控制台打印:
    在这里插入图片描述

五、踩坑

  • 博主用的是阿里云的服务器,需要添加zookeeper使用端口进安全组,这样本机才能访问,不然一直报连接超时,如果你用的虚拟机,需要打开此接口,直接点关闭防火墙
  • zkclientcurator因为dubbo版本原因可能有些不一样,我没太细看,干脆全部加上
  • 如果不想加一个api模块,那就将接口和实现类写在一起,但是这样的话,比较麻烦,还需要将接口写在customer里面,而且路径名称等必须和provider的接口一样,才能保证获取服务
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/53978
推荐阅读
相关标签
  

闽ICP备14008679号