当前位置: 首页 > article >正文

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 {/* @Overridepublic EdocEntry queryEdocEntryById(Integer id) {return new EdocEntry(id,1,"龙象","金戈铁马,床底之间,不过人间来上","他曾是少年",new Date());}*/@Autowiredprivate EdocEntryMapper edocEntryMapper;@Overridepublic 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;@Overridepublic 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,友好的页面返回
禁止: 禁止该消费者调用接口负载均衡:可以设置调用的接口的方法 
随机 : 
轮询 : 来回访问
最少并发 : 自动识别访问最少的机器
http://www.lryc.cn/news/2414653.html

相关文章:

  • Bloom filter 过滤(布隆过滤算法)原理
  • C语言实现集合的基本运算
  • 洛谷4438 [Hnoi2018]道路 【树形dp】
  • 多质量动态系统仿真(Matlab代码实现)
  • 推荐文章:领略东方Project新境界 —— thprac,你的弹幕射击游戏进阶之路
  • 以太坊的单位wei是什么?
  • Winrar通用注册码
  • cellpadding跟cesllspacing区别有什么(table篇)
  • 如何学习数据库
  • CTF比赛总结(小白必看)
  • DWR基本原理及其流程
  • 格兰杰因果分析
  • 文件的简单写入
  • kail-信息收集之DNS解析(dnsenum、dnsrecon、dnswalk)
  • free mobile sex java_Mysql-从原理到优化,深入浅出数据库索引
  • VC2010使用过程常见问题
  • java的编程思想是什么'_编程思想 是什么
  • 栅栏密码(Fence crypto)
  • 监控公司局域网电脑的软件|局域网电脑监控软件哪个好用
  • 61850通讯流程
  • python中dumps、dump、load、loads的区别
  • 安装 USB-Blaster 驱动程序
  • Fire Game (连通块+两点bfs)
  • sobel算子实现原理和c++实现sobel()检测边缘函数
  • IO流原理及流的分类FileInputStream类和FileOutputStream类基本介绍
  • 一些使用频率高的指令及库版本安装切换
  • android——Spinner下拉列表案例详解(2),程序员真的是吃青春饭吗
  • PeopleSoft集成EasyExcel
  • 高级网络安全管理员 - 网络设备和安全配置:SSH 配置
  • XAPOFX1_5.dll文件丢失导致程序无法运行问题