本篇内容主要讲解“Dubbo基础知识总结以及zookeeper安装方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Dubbo基础知识总结以及zookeeper安装方法”吧!
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Services技术之后的自然延伸。
SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。
远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
Dubbo是阿里巴巴开发的一个基于SOA结构基础的,实现RPC远程调用的框架.
Dubbo框架,是基于容器运行的. 容器是Spring.
在编写服务和客户端的时候, 需要注册中心实现服务的发布和订阅. 注册中心中有服务端发布的服务全部信息,包括请求地址,参数命名,参数数量,参数限制,参数是否加密等. 客户端通过注册中心订阅服务,获取服务的所有信息,实现RPC远程访问.
官方网站 : http://dubbo.io/
阿里巴巴已经将dubbo框架捐献给了Apache软件基金会.
注册中心. 用于Dubbo服务的发布和订阅的核心组件.
Dubbo服务编写成功后,发布到注册中心. 客户端通过注册中心订阅服务,并应用.
服务的提供者. 服务器. 运行真实的服务代码的电脑[代码].
如: 腾讯发布的三方登录.
服务的消费者. 客户端. 就是远程调用Provider服务的代码.
如: 三方网站, 网站中提供腾讯相关的登录入口.
容器. 就是让Provider和Consumer正常执行的容器.给Provider和Consumer一个可以正常运行的环境. 在Dubbo中使用Spring容器.
协议. Dubbo的Consumer和Provider通讯的标准.
Dubbo支持多种协议. 如: dubbo协议(Dubbo自定义的应用协议), RMI协议, TCP协议等.
监控中心, 管理中心, 调度中心. 管理Provider数量, Consumer数量, Consumer调用Provider次数的监控中心. 相当于统计.
Dubbo支持多种注册中心. 不同的注册中心提供不同的注册服务方式.
Java开发的一个服务管理应用. 是Hadoop项目的子项目. 动物园管理员. 是一个其他应用的管理应用, 负责协调,调度,管理,配置等功能.
支持断点恢复, 会话恢复, 配置服务项, 配置消费项, 通配信息配置等.
ZooKeeper是一个Java开发的应用. 运行环境只需要JDK和JVM.
广播式注册中心. 只要Provider和Consumer在同一个网段中即可实现服务的发布和订阅.
局限性 : 只适合小型架构或开发测试使用. 因为可能造成广播风暴. 网段内超过5台物理机同时发布服务, 可能造成数据通讯问题, 无法实现快速的服务订阅和应用.
KV服务器注册中心. KV服务器, 高速缓存服务器. 内存型数据库. NOSQL数据库. 后期有课程详细讲解.
类似ZooKeeper注册中心. Provider发布服务到Redis, Consumer从Redis中订阅服务.
优势: 高效.
缺陷: 数据描述相对简单, 使用频率相对较少. 没有经过大量测试, 稳定性不确定.
就是Dubbo自定义的一个注册中心. 减少三方依赖. 让代码依赖性降低, 耦合性降低.
只适合小型应用和开发测试.
官方网站 : http://zookeeper.apache.org/
下载资料的时候,不要下载beta版本.
tar -zxf zookeeper-3.4.6.tar.gz
解压即可使用. 建议复制到/usr/local目录下. 让所有的系统用户都可以使用.
cp -r zookeeper-3.4.6 /usr/local/zookeeper/
可执行文件. 如: 启动,停止,重启等命令.
配置信息. Zookeeper应用的配置文件
Zookeeper应用的jar包库目录. 是Zookeeper依赖的所有jar包保存位置
自定义目录, 常用. 用于保存Zookeeper运行数据的目录.
Zookeeper官方提供的帮助文档
Zookeeper提供的插件和脚本相关资料.
源代码
Zookeeper核心代码库. 后期开发可能应用的jar. 使用maven开发应用的时候,通过依赖下载jar包.
服务状态发生变更时,Zookeeper自动输出一个日志信息. 文件名为zookeeper.out.文本保存在执行服务状态变更目录下. 如: 在目录/usr/local/zookeeper目录中执行命令bin/zkServer.sh start. 日志文件在/usr/local/zookeeper目录中输出.
zkServer.sh - Zookeeper服务脚本. 用于启动,停止,重启使用.
命令 : bin/zkServer.sh start
启动不成功. 有错误. 提示zoo.cfg配置文件不存在.配置文件保存在Zookeeper应用的conf目录中.
Zookeeper提供了一个模板配置文件, 文件名为zoo_sample.cfg. 模板文件中已定义默认的所有配置信息. 可以通过复制使用.
cp zoo_sample.cfg zoo.cfg
在任意位置创建一个目录.用于Zookeeper执行的数据存储目录. 建议在Zookeeper安装目录中创建.
建议命令 : 在Zookeeper安装目录中执行 mkdir data
# 检查时间. 访问的有效时长 tickTime=2000 # 初始化ticket个数. 默认支持多少客户端并发访问. initLimit=10 # 并发访问线程个数 syncLimit=5 # Zookeeper执行过程数据的保存目录,建议使用绝对路径配置. dataDir=/usr/local/zookeeper/data # 客户端端口 clientPort=2181
|
见到下述信息, 代表服务启动成功. standalone代表单机版正在执行.
[root@node1 ~]# /usr/local/zookeeper/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
bin/zkServer.sh stop
bin/zkServer.sh restart
bin/zkServer.sh status
命令: bin/zkCli.sh [-server 主机地址:端口]
默认连接本地2181端口的Zookeeper服务.
[应用名: 主机:端口(状态) 执行的命令数量] [zk: localhost:2181(CONNECTED) 0] |
执行下述命令:
[zk: localhost:2181(CONNECTED) 0] quit
maven工程 - dubbo工程. pom工程.
导入jar包. 使用maven依赖导入.
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.7</version> </dependency> |
maven工程 - Provider, 是dubbo工程的module. pom工程.
Provider工程拆分成两个子工程, 都是Provider工程的module.
service 工程, 是jar工程. 定义接口.
service-impl工程, 是jar工程. 定义接口的实现.
1.1.1 注解
使用Spring注解,管理要发布的接口实现对象.
也可以使用标签bean管理.
1.1.2 spring配置文件
1.1.2.1 扫描服务注解
<context:component-scan />
1.1.2.2 配置Dubbo的Provider服务信息
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 1. 扫描service注解 --> <context:component-scan base-package="com.bjsxt.service" />
<!-- 2. 配置Dubbo相关信息 --> <!-- 2.1 配置应用名, 是Dubbo应用的唯一命名. 是一个Provider定义一个唯一的命名. --> <dubbo:application name="test-provider" />
<!-- 2.2 配置注册中心, 服务的提供者,要向注册中心发布服务. 消费者要从注册中心订阅服务. --> <dubbo:registry address="192.168.120.143:2181" protocol="zookeeper" />
<!-- 2.3 协议信息, Provider和Consumer访问注册中心和相互之间的访问,使用什么协议 --> <dubbo:protocol name="dubbo" port="20880" />
<!-- 2.4 要发布什么服务. 将当前spring容器中的什么bean对象信息,发布到注册中心. --> <dubbo:service interface="com.bjsxt.service.TestService" ref="testServiceImpl"/>
</beans> |
1.1.3 代码发布服务
通过代码的执行, 将spring配置信息,实现发布.
将spring容器中的bean对象信息,发布到Zookeeper注册中心中.
启动spring容器即可. spring的容器可以启动. 因为ClassPathXmlApplicationContext类型实现了接口Runnable. ClassPathXmlApplicationContext可以独立启动线程.
maven工程 - consumer, 是dubbo工程的module. jar工程
编写测试代码. 调用Provider中定义的服务代码. 得到代码返回的结果.
Consumer工程只能和provider-service工程有依赖关系. 通过dubbo的形式,远程调用.
使用spring的注解管理Consumer代码和代码中的属性依赖.
2.2.1 扫描注解
管理Consumer代码和代码中的属性依赖关系.
<context:component-scan />
2.2.2 dubbo配置
描述Dubbo框架信息的.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 1. 扫描本地注解. 管理对象和属性依赖关系. --> <context:component-scan base-package="com.bjsxt.service" />
<!-- 2. dubbo相关信息 --> <!-- 2.1 应用信息 --> <dubbo:application name="test-consumer"/>
<!-- 2.2 配置注册中心 --> <dubbo:registry protocol="zookeeper" address="192.168.120.143:2181"/>
<!-- 2.3 协议, 可以省略. Dubbo相关服务信息是从注册中心中订阅的. Provider在发布服务的时候, 会定义协议信息. 所以Consumer一段配置协议信息无效. 如果配置了<dubbo:protocol>代表的含义是. 当前应用可能要发布服务. 发布服务的时候,使用的协议是什么. -->
<!-- 2.4 引用服务对象.从注册中心中,订阅对应的某一个服务. 服务的单位是接口. 订阅得到的服务,被Dubbo技术封装成一个代理对象. 内部实现由Dubbo决定. id - 就是spring管理的对象的唯一命名. 当前标签相当于定义了一个bean标签, spring容器管理一个对象. 这个对象,是一个Dubbo通过订阅服务,创建的代理对象. 建议将id定义为需要使用的类型中的属性名. spring的@Autowired注解,是先byType,再byName,实现属性注入的. --> <dubbo:reference id="testService" interface="com.bjsxt.service.TestService"/>
</beans> |
为Dubbo应用命名的标签. 是Dubbo框架对应用管理的唯一标记.
要求建议每个Dubbo应用命名不同.
<dubbo:application name=”应用名称”/>
应用命名数据 : 字母,数字,’_’,’-’,’$’.
协议定义, 是为Provider方提供的标签描述. 是Provider在发布服务的时候,绑定的协议信息.
默认协议是: dubbo协议
默认Dubbo协议端口: 20880.
<dubbo:protocol name=”协议名称” port=”端口号” />
注册中心. Dubbo在服务发布和订阅过程的核心. 推荐使用的注册中是Zookeeper.
需要定义访问注册中心的协议和注册中心的地址.
<dubbo:registry protocol=”访问注册中心协议, Zookeeper注册中心使用zookeeper协议” address=”注册中心的地址, 数据结构是: ip:port; 多个注册中心使用逗号分隔.” />
发布服务的标签配置. Provider代码要发布的服务信息. 要发布的服务是由哪一个bean对象提供服务的.要发布的服务接口是什么. 要求bean对象必须实现了接口.
同时可以配置,服务发布的配置. 如: 重试次数, 超时时间等.
<dubbo:service interface=”要发布的服务接口全命名” ref=”接口的实现类bean对象” />
3.4.1 其他属性
3.4.1.1 timeout
超时时长. Consumer访问Provider,要求必须在多长时间内得到响应结果.
在时间限定范围外,会抛出异常.
默认值是:1000毫秒. Provider执行得到结果必须在1000毫秒内.
3.4.1.2 retries
Consumer访问Provider如果发生了异常. 自动重试的次数.
默认值是: 2. 第一访问是主动发起的. 如果有异常,自动重试2次.
Consumer方定义的服务引用配置. 从注册中心订阅服务后, 如何使用.
标签会通知Dubbo框架, 根据订阅的服务, 创建代理对象.
代理对象,同时也是spring容器管理的一个bean对象. 可以通过自动装配注解@Autowired获取.
<dubbo:reference interface=”要订阅的服务接口全命名”
id=”唯一命名, 相当于bean标签的id属性” />
3.5.1 其他属性
3.5.1.1 timeout
默认值是1000毫秒. 由dubbo:consumer标签定义.
如果dubbo:service标签定义了timeout,且dubbo:reference标签未定义timeout属性. 则使用service标签定义的timeout.
3.5.1.2 retries
重试次数, 默认值为2. 由dubbo:consumer标签定义.
如果dubbo:service标签定义了retries,且dubbo:reference标签未定义retries属性. 则使用service标签定义的retries.
是dubbo:service标签的父配置标签. 如果定义了dubbo:provider标签, 则dubbo:sevice标签默认使用其定义的属性信息. 如: retries, timeout等.
如果定义:<dubbo:provider timeout=”3000” retries=”0” />
则所有未定义timeout和retries属性的dubbo:service标签,统一使用3000毫秒作为超时时长,0作为重试次数.
3.6.1 特殊属性
3.6.1.1 payload
定义服务中方法的参数和返回值最大数据范围的. 默认是8M数据.
Consumer访问Provider的时候,传递的参数最大8M. Provider返回给Consumer返回结果的时候,最大8M.
默认值: 88388608, 单位是字节.
定义消费者默认配置的标签. 就是给dubbo:reference标签提供默认设置的.
如: <dubbo:consumer timeout=”3000” retries=”0” /> 而dubbo:reference标签未配置属性. 使用3000作为默认超时时间, 0作为重试次数.
Dubbo框架的通讯协议. Dubbo框架支持多种通讯协议. 默认使用Dubbo协议.
dubbo协议是Dubbo框架自定义的一种协议.
Dubbo缺省协议采用单一长连接和NIO异步通讯方式. 适合大数据量,高并发的服务调用. 以及服务消费机远超过服务提供机的情况.
dubbo协议是一个NIO协议, 长连接小数据量传输协议, 不适合传输大数据. 如: 文件,媒体,图片等. 除非访问请求非常低的情况, 可以使用Dubbo协议传输大数据.
单一长连接 : Consumer和Provider通讯的时候,只有一个连接, 无论时间多久.
NIO : net io. 网络IO流. 异步通讯. 可以Consumer一直发送请求数据, Provider处理一部分返回一部分结果.
Dubbo协议要求,Consumer和Provider在通讯的时候,所有传递的数据都必须可序列化.
Provider提供的服务方法参数表和返回值类型,必须可序列化.
参数和返回值类型不能自定义实现接口List,Set,Map,Number,Calendar等.
传输数据的时候,只传输类型属性的值和属性的类型. 不传递方法信息和静态数据.
JDK提供的标准协议,是远程方法调用协议. remote method invoke.
多连接, 短连接, tcp协议, 同步传输数据. 服务参数和返回值必须实现可序列化.
适合客户端和服务器数量差不多的情况. 可以传输文件. 超时时长无效.
hessian协议, 基于http应用层协议. 通过servlet暴露服务.
多连接,短连接, http协议. 同步传输. 参数返回值数据量大. Provider数量大于Consumer数量. 服务的参数和返回值必须可序列化.
基于RPC的应用层协议.
是基于Memcached高效KV服务器实现的注册中心. 类似Redis.
不需要Consumer感知注册中心位置. 可以使用property属性实现服务的应用.
到此,相信大家对“Dubbo基础知识总结以及zookeeper安装方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。