目录
一、分布式系统
什么是分布式系统
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统,分布式系统是建立在网络上的服务端一种结构。
RPC(Remote Procedure Call)
是指远程过程调用,是一种进程间通信方式,是技术思想,允许程序调用另一个地址空间的过程或函数,而不用开发人员显示编码这个调用的细节。调用本地方法和调用远程方法一样。
RPC的特点:简单、高效、通用
RPC基本原理
二、dubbo框架
Dubbo提供三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Dubbo是一个分布式服务框架,致力于提高性能和透明化的RPC远程服务调用方案、服务治理方案。
官网:http://dubbo.apache.org/zh-cn/
基本框架
服务提供者(provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务
服务消费者(consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法。
注册中心(registry):注册中心返回服务提供者地址列表给消费者
监控中心(monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
dubbo支持的协议
dubbo直连方式
点对点的直连项目:消费之直接访问服务提供者,没有注册中心。消费之必须指定服务提供者的访
问地址
创建服务提供者
创建一个maven web工程:服务的提供者
创建一个实体bean查询结果
提供一个服务接口:xxxx
实现这个服务接口:xxxxImpl
配置dubbo服务提供者的名称:保证唯一
声明dubbo使用的协议和端口号
暴露服务,使用直连
添加监听器
配置pom文件加入spring 依赖和dubbo依赖
<!--Spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.16.RELEASE</version>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
创建dubbo配置文件
<!--服务提供者声明名称:必须保证服务名称的唯一性,它的名称是dubbo内部使用的唯一标识-->
<dubbo:application name="001-link-userservice-provider"/>
<!--访问服务协议的名称及端口号,dubbo官方推荐使用的是dubbo协议,端口号默认为20880-->
<!--
name:指定协议的名称
port:指定协议的端口号(默认为20880)
-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--
暴露服务接口->dubbo:service
interface:暴露服务接口的全限定类名
ref:接口引用的实现类在spring容器中的标识
registry:如果不使用注册中心,则值为:N/A
-->
<dubbo:service interface="com.wkcto.dubbo.service.UserService" ref="a" registry="N/A"/>
<!--将接口的实现类加载到spring容器中-->
<bean id="a" class="com.wkcto.dubbo.service.impl.UserServiceImpl"/>
创建服务消费者
创建一个maven web工程:服务的消费者
配置pom文件:添加需要的依赖
设置dubbo的核心配置文件
编写controller
配置中央调度器(servlet:DispatcherServlet)
配置pom文件还要添加依赖服务提供
将提供者打包成jar包发送到本地仓库
<!--依赖服务提供者-->
<dependency>
<groupId>com.wkcto.dubbo</groupId>
<artifactId>001-link-userservice-provider</artifactId>
<version>1.0.0</version>
</dependency>
创建dubbo配置文件
<!--声明服务消费者的名称:保证唯一性-->
<dubbo:application name="002-link-consumer"/>
<!--
引用远程服务接口:
id:远程服务接口对象名称
interface:调用远程接口的全限定类名
url:访问服务接口的地址
registry:不使用注册中心,值为:N/A
-->
<dubbo:reference id="userService"
interface="com.wkcto.dubbo.service.UserService"
url="dubbo://localhost:20880"
registry="N/A"/>
dubbo服务最优化
分包
建议将服务接口、服务模型、服务异常均放在公共包中
粒度
常用的标签
Dubbo常用标签分为三类:公用标签、服务提供者标签、服务消费者标签
公用标签:<dubbo:application/>和<dubbo:registry>
配置应用信息<dubbo:application name="服务的名称"/>
配置注册中心<dubbo:registry address="ip:port" protocol="协议"/>
提供者标签:<dubbo:service interface=”服务接口名” ref=”服务实现对象 bean”>
消费者标签:<dubbo:reference id=”服务引用 bean 的 id” interface=”服务接口名”/>
三、注册中心—Zookeeper
dubbo-使用注册中心
pom文件相关依赖
<!--注册中心依赖-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
<!--声明dubbo使用的协议名称和端口号-->
<dubbo:protocol name="dubbo" port="20880"/>
<!--现在要使用zookeeper注册中心-->
<!--指定注册中心地址和端口号-->
<!--<dubbo:registry address="zookeeper://localhost:2181"/>-->
<!--使用linux系统中的zookeeper服务-->
<dubbo:registry address="zookeeper://192.168.154.128:2181"/>
<!--暴露服务接口-->
<dubbo:service interface="com.mei.dubbo.service.UserService" ref="userServiceImpl"/>
<!--加载接口实现类-->
<bean id="userServiceImpl" class="com.mei.dubbo.service.impl.UserServiceImpl"/>
消费者dubbo配置
<!--声明dubbo服务消费者名称:保证唯一性-->
<dubbo:application name="008-zk-consumer"/>
<!--指定注册中心-->
<!--<dubbo:registry address="zookeeper://localhost:2181"/>-->
<!--使用linux系统中的zookeeper服务-->
<dubbo:registry address="zookeeper://192.168.154.128:2181"/>
<!--引用远程接口服务-->
<dubbo:reference id="userService" interface="com.mei.dubbo.service.UserService"/>
四、dubbo参数配置
关闭检查
重读次数
超时时间
版本号
<!--引用远程接口服务-->
<dubbo:reference id="userService" interface="com.mei.dubbo.service.UserService" version="1.0.0" />
<dubbo:reference id="userService2" interface="com.mei.dubbo.service.UserService" version="2.0.0"/>