SpringBoot &Dubbo+Zookeeper 初步

786 阅读2分钟

何为RPC(远程调用)

  • 通俗讲解RPC
  • 就是一个程序调用不在一个项目里(也可以是不在一个主机里,不在一个进程里,反正就是不能直接使用的程序),而非要使用无法直接使用的程序,从而导致RPC的出现

何为Dubbo和Zookeeper

image.png

  • 节点角色
节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器
  • Zookeeper就是注册中心,是Dubbo中的一个角色。
  • Dubbo就是一个框架,我们只要往里面填它所需要的东西即可。
  • 至于为什么要这个框架,Dubbo文档有说明它满足了什么需求,不再赘述。

如何使用Dubbo+Zookeeper

步骤

  1. 先下载Zookeeper
  2. 启动zookeeper
  3. 再搞一个Dubbo-Admin(可有可无),就一个Dubbo的可视化界面.(就像MySql之于Nativecat或SQLyog)
  4. 创建两个毫不相干的程序(SpringBoot项目)

详细步骤

步骤1和2、

  • 下载Zookeeper,windows要下有bin的压缩包。
  • 配置环境变量一定要用管理员运行命令行,出问题就是没有以管理员身份运行。
  • 找到解压路径的bin文件夹,找到里面的执行文件。windows下是zkServer.cmd,运行,
  • 找到解压路径的bin文件夹,找到里面的执行文件。windows下是zkCli.cmd,运行,
  • 如果配置了zookeeper的环境变量,直接在控制台输入zkServer.cmd,不要要到指定目录,管理员cmd
  • zookeeper启动后不要关闭cmd控制台 步骤3、
  • github下载Dubbo-Admin
  • 将下载的打包成jar包,用管理员身份运行它 java -jar ***.jar
  • 浏览器打开http://localhost:7001 步骤4、
  • 导入依赖
<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.9</version>
        </dependency>

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

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.7.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-1og4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

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

  • 创建一个springboot项目,为provider 接口
public interface TicketService {
    public String getTicket();
}

实现接口

@DubboService
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "给你票";
    }
}

配置application.properpites

server.port=8001
# 这个服务的端口号
dubbo.application.name=provider-server
#名字
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 再这个网址(zookeeper)注册,
dubbo.scan.base-packages=com.boot.service
# 扫描这个包,有@DubboService的,将其注册进zookeeper
  • 创建另外一个SpringBoot项目,为consumer

导入依赖和上面的一样


要使用provider的类

import org.springframework.stereotype.Service;

@Service//让spring托管
public class UserService {
    @DubboReference//引用远程的对象
    TicketService ticketService;
    public void buyTicket(){
        String s =ticketService.getTicket();
        System.out.println("consumer说:\"我要票、、\""+"\n"+"provider说:"+"\""+s+"\"");
    }
}

再在创建一个和provider中一样的接口

public interface TicketService {
    String getTicket();
}

配置application.properpites

server.port=8002
dubbo.application.name=consumer-server
dubbo.registry.address=zookeeper://127.0.0.1:2181
  • 测试一下
@SpringBootTest
class ConsumerServerApplicationTests {
    @Autowired
    UserService userService;
    @Test
    void contextLoads()  {
        userService.buyTicket();
    }
}

image.png

小结

注解相关

  • @DubboService,告诉Dubbo这个是provider,以便consumer调用
  • @DubboReference,告诉Dubbo要使用注册在zookeeper中的对象

配置

  • Provider和Consumer都要注册进zookeeper
  • Provider还需要配置扫描哪些包里的注解。

小小结

image.png