dubbo和zookeeper

1.dubbo和Zookeeper

1.简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口.

2.dubbo和zookeeper使用

1.需要下载zookeeper组件进行启动

window使用直接解压版
默认端口号 : 2181
启动 zkserver.cmd
连接 zkcli.cmd
1.配置文件详解
tickTime:基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔 tickTime时间就会发送一个心跳。

dataDir:存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
server.A = B:C:D
A表示这个是第几号服务器
B 是这个服务器的 ip 地址
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader

2.运行dubbo监控台

将打包好的dubbo的jar包 使用 Java -jar 命令执行
地址 localhost:7001
用户名 密码 root root 

3.如何在项目中多模块配置提供者 ,注册中心,消费者

1.创建项目

1.创建一个springboot 项目 ,不勾选javaweb 
2.删除除pom文件之外的目录
3.刷新maven
4.创建新的模块 (module)javaweb 项目
分别 为 :privider api consumer

2.父级pom文件配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.kgc.sbt</groupId>
    <artifactId>springboot-09-dubbo-88</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-09-dubbo-88</name>
    <description>Demo project for Spring Boot</description>
    <!-- 修改为父级pom -->
    <packaging>pom</packaging>
    <properties>
        <java.version>1.8</java.version>
        <dubbo.version>0.1.0</dubbo.version>
        <zkclient.version>0.10</zkclient.version>
    </properties>
    <!-- 模块管理 -->
    <modules>
        <module>deoccenter-provider</module>
        <module>edoccenter-api</module>
        <module>edoccenter-consumer</module>
    </modules>
    <!-- dependencyManagement 管理版本依赖,在子模块的pom中添加的依赖如果背父pom管理了,就不要添加版本,注意;新添加的jar包,必须通过dependency去下载-->
    <dependencyManagement>
        <dependencies>
            <!-- dubbo-spring-boot-starter  begin -->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <!-- dubbo-spring-boot-starter  end -->
            <!-- zkclient begin -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
            <!-- zkclient end -->
            <!-- edoccenter-api begin -->
            <dependency>
                <groupId>com.kgc.sbt.edoc</groupId>
                <artifactId>edoccenter-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <!-- edoccenter-api end -->
        </dependencies>
    </dependencyManagement>
</project>

// 修改父级pom
// 添加模块管理 module  管理的是 配置文件中dubbo.application.name
// dependencyManagement 管理版本依赖,在子模块的pom中添加的依赖如果背父pom管理了,就不要添加版本,注意;新添加的jar包,必须通过dependency去下载
// 无需打包 所以 <artifactId>spring-boot-maven-plugin</artifactId> 无需添加

3.privider(提供者)配置

1.pom修改
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <!-- 父级的pom -->
        <groupId>com.kgc.sbt</groupId>
        <artifactId>springboot-09-dubbo-88</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 上一级的pom -->
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>com.kgc.sbt.edoc</groupId>
    <artifactId>deoccenter-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>deoccenter-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 引入 dubbo zookeeper和 自己配置的api的管理 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        <dependency>
            <groupId>com.kgc.sbt.edoc</groupId>
            <artifactId>edoccenter-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.配置文件修改
# 端口
server.port=8088

# dubbo+zookeeper配置
dubbo.application.name=edoc-provider     //统一的提供者的名称
dubbo.registry.address=127.0.0.1:2181    // 注册中心的ip
dubbo.registry.protocol=zookeeper        // 注册协议
dubbo.protocol.port=20880                // 注册id号
# 从20880开始 也可以使用-1                // -1是dubbo自动寻找空置的id进行配置
# 只需要记住扫描@service注解所在的父包
dubbo.scan.base-packages=com.kgc.sbt.edoc.provider    // 将包内的类注册为提供者
3.启动类上启用@EnableDubbo
@SpringBootApplication
@EnableDubbo // 启用dubbo注册到dubbo的注册中心
@MapperScan("com.kgc.sbt.edoc.mapper")
public class DeoccenterProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DeoccenterProviderApplication.class, args);
    }
}
4.编写提供者程序,并使用@Service注解

/**
 * Created on 2021/6/6.
 * Author: lzy
 * Description: 电子文档操作服务提供者
 */
@Service // 所在包是alibaba下,实现服务注册为提供者
public class EdocEntryProvider implements EdocQueryApi {
   /* @Override
    public EdocEntry queryEdocEntryById(Integer id) {
        return new EdocEntry(id,1,"龙象","金戈铁马,床底之间,不过人间来上","他曾是少年",new Date());
    }*/
   @Autowired
   private EdocEntryMapper edocEntryMapper;
    @Override
    public EdocEntry queryEdocEntryById(Integer id) {
        return edocEntryMapper.selectEdocEntryById(id);
    }
}

4.consumer(消费者)配置

1.pom文件修改
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <!-- 父级的grouId -->
        <groupId>com.kgc.sbt</groupId>
        <artifactId>springboot-09-dubbo-88</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 上一级的pom -->
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>com.kgc.sbt.edoc</groupId>
    <artifactId>edoccenter-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>edoccenter-consumer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>
        <dependency>
            <groupId>com.kgc.sbt.edoc</groupId>
            <artifactId>edoccenter-api</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
2.配置文件修改
# 端口号
server.port=8089

# dubbo+zookeeper配置
dubbo.application.name=edoc-consumer   
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.scan.base-packages=
3.使用@Reference 注册为消费者
@Service // 它是spring的,不是alibaba的,业务层组件
public class EdocEntryServiceImpl implements EdocEntryService {

    @Reference // 是阿里巴巴的,注册为消费者
    private EdocQueryApi edocQueryApi;

    @Override
    public EdocEntry queryEntryById(Integer id) {
        return edocQueryApi.queryEdocEntryById(id);
    }
}

5.api -注册中心

1.加入pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <!-- 父级的grouId -->
        <groupId>com.kgc.sbt</groupId>
        <artifactId>springboot-09-dubbo-88</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 上一级的pom -->
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>com.kgc.sbt.edoc</groupId>
    <artifactId>edoccenter-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>edoccenter-api</name>
    <description>Demo project for Spring Boot</description>
    <!-- 此处配置的打包方式jar,只会自动打包为普通的jar,(只能依赖,不能运行),主要用于以jar的方式给其他模块进行依赖,达到代码共享 -->
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>

</project>
2.无需配置文件,因为只是将提供者的接口打包成jar包,以便其他模块的依赖
3.创建公共接口
/**
 * Created on 2021/6/6.
 * Author: lzy
 * Description: 电子文档查询公共接口
 */
public interface EdocQueryApi {
    /**
    *@ClassName: EdocQueryApi
    *@Description 根据id查询电子文档详情
    *@Author lzy
    *@Date 2021/6/6
    */
    EdocEntry queryEdocEntryById(Integer id);
}

2.dubbo的管理功能

提供者
权重 : 设置调用该接口的几率

消费者
容错 : 设置可以查询为null,友好的页面返回
禁止: 禁止该消费者调用接口

负载均衡:可以设置调用的接口的方法 
随机 : 
轮询 : 来回访问
最少并发 : 自动识别访问最少的机器




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值