Dubbo+Zookeeper快速入门!

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后,启动提供者模块,就可以在注册监控管理后台看到注册了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWOLLhlq-1620888239362)(upload\image-20200613075422131.png)]

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);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mango1698

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值