福建建设信息网站,中国建设银行手机银行网站,网站 空间,网站建设规范目录 第一章、概念介绍1.1#xff09;什么是RPC框架1.2#xff09;什么是分布式系统1.3#xff09;Dubbo概述1.3#xff09;Dubbo基本架构 第二章、服务提供者(直连)2.1#xff09;目录结构和依赖2.2#xff09;model层2.3#xff09;service层2.4#xff09;resources… 目录 第一章、概念介绍1.1什么是RPC框架1.2什么是分布式系统1.3Dubbo概述1.3Dubbo基本架构 第二章、服务提供者(直连)2.1目录结构和依赖2.2model层2.3service层2.4resources配置文件 第三章、服务消费者(直连)3.1目录结构和依赖3.2service层3.3resources配置文件 第四章、注册中心Zookeeper4.1注册中心概述4.2下载Zookeeper注册中心4.3Windows安装Zookeeper4.3Linux安装Zookeeper 第五章、dubbo使用注册中心5.1项目加入zookeeper客户端依赖5.2配置文件修改5.3dubbo其他配置 友情提醒 先看文章目录大致了解文章知识点结构点击文章目录可直接跳转到文章指定位置。 第一章、概念介绍
1.1什么是RPC框架
RPC 【Remote Procedure Call】是指远程过程调用是一种进程间通信方式是一种技术思想而不是规范。它允许程序调用另一个地址空间网络的另一台机器上的过程或函数而不用开发人员显式编码这个调用的细节。调用本地方法和调用远程方法一样。
1.2什么是分布式系统
分布式系统是若干独立计算机服务器的集合这些计算机对于用户来说就像单个相关系统分布式系统distributed system是建立在网络之上的服务器端一种结构。 部署在独立服务器上的各个子系统项目相互之间可以调用形成一个大型分布式系统 独立部署的服务器没有额外要求只需要满足子系统需求即可。 分布式系统中的计算机可以使用不同的操作系统可以运行不同应用程序提供服务将服务分散部署到多个计算机服务器上。
1.3Dubbo概述
Dubbo官网网址官网链接 ①Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架它提供了三大核心能力面向接口的远程方法调用智能容错和负载均衡以及服务自动注册和发现。可以和Spring框架无缝集成。
②Dubbo是一个分布式服务框架致力于提供高性能和透明化的RPC远程服务调用方案、服务治理方案。
③面向接口代理调用接口的方法在A服务器调用B服务器的方法由dubbo实现对B的调用无需关心实现的细节就像MyBatis访问Dao的接口可以操作数据库一样。不用关心Dao接口方法的实现。这样开发是方便舒服的。
④支持多种协议dubbo , hessian , rmi , http, webservice , thrift , memcached , redis。dubbo官方推荐使用dubbo协议。dubbo协议默认端口20880
1.3Dubbo基本架构
①服务提供者Provider暴露服务的服务提供方服务提供者在启动时向注册中心注册自己提供的服务。服务容器spring负责启动加载运行服务提供者。
②服务消费者Consumer: 调用远程服务的服务消费方服务消费者在启动时向注册中心订阅自己所需的服务服务消费者从提供者地址列表中基于软负载均衡算法选一台提供者进行调用如果调用失败再选另一台调用。
③注册中心Registry注册中心返回服务提供者地址列表给消费者如果有变更注册中心将基于长连接推送变更数据给消费者 –如果信息有变注册中心提供新的信息给消费者
④监控中心Monitor服务消费者和提供者在内存中累计调用次数和调用时间定时每分钟发送一次统计数据到监控中心 –监控服务提供者、消费者状态与开发没有直接关系
第二章、服务提供者(直连)
2.1目录结构和依赖 pom文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.bjpowernode.dubbo/groupIdartifactId001-link-orderservice-provider/artifactIdversion1.0.0/versiondependencies!--Spring --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion4.3.16.RELEASE/version/dependency!--Dubbo依赖--dependencygroupIdcom.alibaba/groupIdartifactIddubbo/artifactIdversion2.6.2/version/dependency/dependenciesbuildplugins!--JDK1.8编译插件--pluginartifactIdmaven-compiler-plugin/artifactIdversion3.1/versionconfigurationsource1.8/sourcetarget1.8/target/configuration/plugin/plugins/build/project2.2model层
order
package com.bjpowernode.dubbo.model;import java.io.Serializable;public class Order implements Serializable {private String id;private String goodsName;private Double price;private Integer amount;public Order() {}public Order(String id, String goodsName, Double price, Integer amount) {this.id id;this.goodsName goodsName;this.price price;this.amount amount;}public String getId() {return id;}public void setId(String id) {this.id id;}public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName goodsName;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price price;}public Integer getAmount() {return amount;}public void setAmount(Integer amount) {this.amount amount;}Overridepublic String toString() {return Order{ id id \ , goodsName goodsName \ , price price , amount amount };}
}
2.3service层
OrderService
package com.bjpowernode.dubbo.service;import com.bjpowernode.dubbo.model.Order;public interface OrderService {public Order addOrder(Integer userId,String goodsName, Double price,Integer amount);
}
OrderServiceImpl
package com.bjpowernode.dubbo.service;import com.bjpowernode.dubbo.model.Order;public class OrderServiceImpl implements OrderService{public Order addOrder(Integer userId, String goodsName, Double price, Integer amount) {return new Order(110,goodsName,price,amount);}
}
OrderApplication
package com.bjpowernode.dubbo;import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;import java.io.IOException;public class OrderApplication {public static void main(String[] args) throws IOException {/*** 启动spring容器阅读配置文件* 1、 new ClassPathXmlApplicationContext(orderservce-provider.xml);* 2、 new FileSystemXmlApplicationContext(D:/orderservce-provider.xml);* 3、tomcat启动*/new ClassPathXmlApplicationContext(orderservce-provider.xml);//标准键盘输入线程会阻塞System.in.read();}
}
2.4resources配置文件
orderservce-provider.xml
?xml version1.0 encodingUTF-8?
beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:dubbohttp://dubbo.apache.org/schema/dubboxmlnshttp://www.springframework.org/schema/beans xmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd!--服务项目名称唯一 它的名称是dubbo内部使用的唯一标识 饭店名称--dubbo:application name001-link-order-service-provider/dubbo:application!--定义协议告诉消费者如何访问 怎么访问--dubbo:protocol namedubbo port20880/dubbo:protocol!--dubbo:service:提供暴露服务 菜单interface:区分不同的服务ref关联真正提供服务的bean对象registryN/A直连--dubbo:serviceinterfacecom.bjpowernode.dubbo.service.OrderServicereforderServiceImpl registryN/A/!--真正提供服务的bean对象 厨师--bean idorderServiceImpl classcom.bjpowernode.dubbo.service.OrderServiceImpl/bean
/beans第三章、服务消费者(直连)
3.1目录结构和依赖 pom文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.bjpowernode.dubbo/groupIdartifactId002-link-main-web/artifactIdversion1.0.0/versiondependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion4.3.16.RELEASE/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddubbo/artifactIdversion2.6.2/version/dependencydependencygroupIdcom.bjpowernode.dubbo/groupIdartifactId001-link-orderservice-provider/artifactIdversion1.0.0/version/dependency/dependencies/project3.2service层
ShopService
package com.bjpowernode.dubbo.service;import com.bjpowernode.dubbo.model.Order;public interface ShopService {public Order buyGoods(Integer userId, String goodsName, Double price, Integer amount);}
ShopServiceImpl
package com.bjpowernode.dubbo.service;import com.bjpowernode.dubbo.model.Order;public class ShopServiceImpl implements ShopService {OrderService orderService;public void setOrderService(OrderService orderService) {this.orderService orderService;}public Order buyGoods(Integer userId, String goodsName, Double price, Integer amount) {// new OrderServiceImpl().addOrder()return orderService.addOrder(userId, goodsName, price, amount);}
}
ShopApplication
package com.bjpowernode.dubbo;import com.bjpowernode.dubbo.model.Order;
import com.bjpowernode.dubbo.service.ShopService;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class ShopApplication {public static void main(String[] args) {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(shop-consume.xml);ShopService shopServiceImpl (ShopService)context.getBean(shopServiceImpl);Order order shopServiceImpl.buyGoods(1111, apple, 10d, 2);System.out.println(order);}
}
3.3resources配置文件
shop-consume.xml
?xml version1.0 encodingUTF-8?
beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:dubbohttp://dubbo.apache.org/schema/dubboxmlnshttp://www.springframework.org/schema/beans xmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd!--服务项目名称唯一--dubbo:application name002-link-main-web/dubbo:application!--dubbo:reference:生成一个 代表远程服务的 bean对象idremoteOrderServicebean对象名称url:dubbo服务地址interface区分不同的服务registryN/A:直连--dubbo:referenceidremoteOrderServiceurldubbo://localhost:20880interfacecom.bjpowernode.dubbo.service.OrderServiceregistryN/A/bean idshopServiceImpl classcom.bjpowernode.dubbo.service.ShopServiceImplproperty nameorderService refremoteOrderService/property/bean/beans第四章、注册中心Zookeeper
4.1注册中心概述
通过将服务统一管理起来可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo 提供的注册中心有如下几种类型可供选
1、Multicast注册中心组播方式 2、Redis注册中心使用Redis作为注册中心 3、Simple注册中心就是一个dubbo服务。作为注册中心。提供查找服务的功能。 4、Zookeeper注册中心使用Zookeeper作为注册中心
注册中心工作方式
4.2下载Zookeeper注册中心
①Zookeeper是一个高性能的分布式的开放源码的分布式应用程序协调服务。Zookeeper运行需要java环境。
官网下载地址: http://zookeeper.apache.org/
②点击download下载 ③找到历史版本in the archive ④下载3.5.6版本
4.3Windows安装Zookeeper
①下载的文件zookeeper-3.5.4-beta.tar.gz. 解压后到目录就可以了例如d:/servers/ zookeeper-3.5.4 修改zookeeper-3.5.4/conf/ 目录下配置文件 ②复制zoo-sample.cfg改名为zoo.cfg然后打开文件查看文件内容 查看zoo.cfg文件内容 文件内容介绍 tickTime: 心跳的时间默认2000毫秒. Zookeeper服务器之间或客户端与服务器之间每2秒就会发送一个心跳。表明存活状态。
dataDir: 数据目录可以是任意目录。存储zookeeper的快照文件、pid文件默认为/tmp/zookeeper
clientPort: 客户端连接zookeeper的端口即zookeeper对外的服务端口默认为2181 ④在文件配置最下面加入需要使用的端口号
admin.serverPort8888⑤bin目录下双击cmd文件启动zookeeper windows启动zookeeper成功
4.3Linux安装Zookeeper
①VMware虚拟机下载安装虚拟机中安装Linux系统CentOS7图文详解 Linux安装教程链接
②Zookeeper的运行需要Linux系统先安装好jdk. 安装jdk教程链接
③使用xftp工具将刚刚下载好的zookeeper-3.5.6-beta.tar.gz 文件传输到Linux系统下的/usr/local/目录 xftp工具的使用教程链接
④解压压缩文件到/usr/local/目录
tar -zxvf zookeeper-3.5.6-beta.tar.gz -C /usr/local/⑤进入解压后的conf目录
cd apache-zookeeper-3.8.1-bin/conf⑥拷贝文件 zoo-sample.cfg 为 zoo.cfg
zoo_sample.cfg⑦使用vim命令修改zoo.cfg文件内容
vim zoo.cfg增加如下内容后保存退出
admin.serverPort9999⑦切换到bin目录下启动zookeeper关闭zookeeper
切换bin目录
cd ..
cd bin启动zookeeper
./zkServer.sh start关闭zookeeper
./zkServer.sh stop第五章、dubbo使用注册中心
5.1项目加入zookeeper客户端依赖
每个模块均要加入如下代码
!-- zookeeper客户端依赖 --
dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion4.1.0/version
/dependency5.2配置文件修改
服务提供者和消费者均要加入注册中心 dubbo:registry addresszookeeper://192.168.52.128:2181 checkfalse/dubbo:registry直连的服务配置修改为注册中心方式 !--暴露服务--dubbo:service interfacecom.bjpowernode.dubbo.service.UserInfoServicerefuserInfoServiceImpl retries2 timeout20000version1.36/dubbo:service5.3dubbo其他配置
①关闭检查 dubbo:registry addresszookeeper://192.168.52.128:2181 checkfalse/dubbo:registry②重试次数
dubbo:service retries2 /
或
dubbo:reference retries2 /③超时时间 由于网络或服务端不可靠。为了避免超时导致客户端资源线程挂起耗尽必须设置超时时间。
dubbo消费端
指定接口超时配置
dubbo:reference interfacecom.foo.BarService timeout2000 /dubbo服务端
指定接口超时配置
dubbo:server interfacecom.foo.BarService timeout2000 /④版本号 服务提供者增加版本号 !--暴露服务--dubbo:service interfacecom.bjpowernode.dubbo.service.UserInfoServicerefuserInfoServiceImpl retries2 timeout20000version2.0.0/dubbo:service服务消费者增加版本号 dubbo:referenceidremoteUserInfoService2interfacecom.bjpowernode.dubbo.service.UserInfoServiceversion2.0.0/