1. 分布式

分布式是建立在网络之上的

RPC两个核心:通信,序列化

序列化:数据传输需要转换,为了对象的传输


2. Dubbo

高可用的RPC框架

三大核心能力:

  • 面向接口的远程方法调用
  • 智能容错和负载均衡
  • 服务自动注册与发现

Dubbo默认端口:20880

image-20200613081745376

3. Zookeeper 注册中心

zookeeper默认端口为:2181

下载解压zookeeper

双击bin下的zkServer.cmd,可能会==闪退==

解决方案:

可以编辑该zkServer.cmd文件,在倒数第二行,添加pause来暂停,这样我们就可以看到错误信息了

我们看到问题是:conf文件夹下,不存在zoo.cfg文件

我们将zoo_sample.cfg文件复制一份并改名为zoo.cfg

这样,我们就可以正常启动zkServer.cml了

命令:

  • ls / 查看所有
  • create -e /键名 值 创建
  • get / 键名 获取

4. Dubbo-admin

一个监控管理后台

访问端口:7001

默认账号密码:root root

可以查看我们注册了哪些服务,哪些服务被注册了

在Dubbo-admin下载后,先要对dubbo-admin进行打包

在项目目录下

mvn clean package -Dmaven.test.skip=true

在打包后,双击target下的jar包就可以启动了,先启动zookeeper,然后直接访问localhost:7001


5. Springboot整合Dubbo和Zookeeper

1. 新建一个空项目

2. 新建一个模块

作为提供者,下一个Service及其实现类,如TicketService

==使用了Dubbo后,最好不用Service注解,用Component,因为在Dubbo包下有同名的Service注解==

在提供者哪个模块中,导入依赖

<!--导入依赖 Dubbo+zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->

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

<!--导入zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.12.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<!--日志会冲突,需要排除slf4j-log4j12-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在提供者的模块中进行配置

server.port=8001
dubbo.application.name=provider-service      # 服务应用名字 自定义
dubbo.registry.address=zookeeper://127.0.0.1:2181     # 注册中心 zookeeper 地址
dubbo.scan.base-packages=cn.codewei.service      # 哪些服务要被注册,指定扫描包下的

在被扫描包下的service实现类上添加注解

@Service     // 注意:!!不是Spring下的,是Dubbo包下的

加上注解后,该服务就可以被扫描到了,在项目一启动就会自动注册到注册中心zookeeper中

这样启动zookeeper,dubbo-admin后,启动提供者模块,就可以在注册监控管理后台看到注册了

image-20200613075422131

3. 新建一个模块,作为消费者

导入相关依赖

<!--导入依赖 Dubbo+zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->

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

<!--导入zookeeper-->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.12.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<!--日志会冲突,需要排除slf4j-log4j12-->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

进行配置,去哪里拿服务

server.port=8002
dubbo.registry.address=zookeeper://127.0.0.1:2181        // 去哪里拿服务,注册中心地址
dubbo.application.name=consumer    # 拿服务需要消费者暴露自己的名字,自定义

在消费者模块中,写一个类UserService

同个@Reference注解(==dubbo包下的!!==),来获取远程的服务

在消费者中,要定义一个和提供者路径相同的服务接口,接口名要相同,方法也要相同,这样就可以远程获取到实现类了

public interface TicketService {
    public String getTicket();
}
@Service
public class UserService {

    // 想拿到 provider-service 提供的票
    @Reference
    TicketService ticketService;

    public void buyTicket(){
        String ticket = ticketService.getTicket();    // 调用的远程的方法
        System.out.println("再注册中心--->"+ticket);
    }
}
本文作者: Author:     文章标题: Dubbo+Zookeeper快速入门!
本文地址: https://codewei.cn/archives/179/      
版权说明:若无注明,本文皆为“阿伟的小屋”原创,转载请保留文章出处
Last modification:June 13th, 2020 at 08:24 am
贫困山区儿童,谢谢打赏