软件架构演变:
==>单一架构:将所有模块和功能都部署在一个服务器上
==>垂直系统架构:将不同功能的模块独立出来,部署于不同的服务器上,每个模块相互独立,不可互相访问
==>分布式服务架构:不仅要将不同功能的模块独立部署,还要保证每个模块之间也能相互访问
dubbo中的角色分类:
|--服务提供者(provider)
|--向注册中心注册自己可以提供的服务
|--服务消费者(consumer)
|--向注册中心订阅自己需要的服务,并得到由注册中心提供的服务方地址
|--注册中心(registry)
|--保存提供者的服务地址,并在消费者订阅时依据一定算法反馈当前最佳的服务方
|--监控中心(monitor)
|--定期统计服务者和消费者被调用的次数和时间
dubbo的使用方式:
|--直连方式(即不采用注册中心)
|--编写接口模块
|--将需要用到的实体类都在该模块中进行编写并进行序列化
|--将需要用到的业务层功能接口都在该模块中进行编写
|--编写完成后将该模块打成jar包放入本地maven仓库,便于后期提供者、消费者模块调用
|--编写提供者模块
|--确保该模块已经搭建好了springweb的基本环境
|--引入dubbo依赖以及编写好的接口模块依赖
|--在spring的核心配置文件中配置dubbo,具体格式如下
|--<dubbo:application name="XX"/>
|--XX为自定义的dubbo服务名,注意要确保唯一性
|--<dubbo:protocol name="XX" port="YY"/>
|--XX用于设置对外暴露的协议名,一般使用dubbo
|--YY用于设置对外暴露的端口号,一般使用20880
|--<dubbo:service interface="XX" ref="YY" version="ZZ" register="N/A"/>
|--XX为接口模块中功能接口的全限定类名
|--YY为实现接口模块中功能接口的实现类bean的别名
|--ZZ用于设置该服务的版本号
|--设置版本号是为了区分统一接口下的不同实现类
|--编写消费者模块
|--确保该模块已经搭建好了springweb的基本环境
|--引入dubbo依赖以及编写好的接口模块依赖
|--在spring的核心配置文件中配置dubbo,具体格式如下
|--<dubbo:application name="XX"/>
|--XX为自定义的dubbo服务名,注意要确保唯一性
|--<dubbo:reference id="XX" interface="YY" url="ZZ" version="KK" registry="N/A"/>
|--XX用于自定义所请求到的提供者模块中的实现类在本模块中的bean别名
|--YY为接口模块中功能接口的全限定类名
|--ZZ为提供者模块中暴露的协议://提供者模块所在的ip地址:提供者模块对外暴露的端口号
|--KK为需要调用服务的版本号
|--设置版本号是为了区分统一接口下的不同实现类
|--zookeeper方式(即注册中心方式)
|--安装注册中心
|--windows环境下
|--解压zookeeper压缩包得到其安装文件夹
|--在zookeeper安装文件夹的目录下新建一个data文件夹用于存储注册中心运行时的临时文件
|--将zookeeper安装文件夹下conf文件夹下的zoo_sample.cfg复制一份并重命名为zoo.cfg
|--编辑zoo.cfg文件,具体编辑内容如下
|--修改dataDir的属性值为我们新建的data文件路径
|--新建一个admin.serverPort属性,并自定义一个值
|--这项操作是因为注册中心启动除了占用自己的端口号还会占用8080端口号,故手动给其一个占用端口以释放8080
|--双击zookeeper安装文件夹下bin文件夹中的zkServer.cmd即可启动注册中心
|--linux环境下
|--解压zookeeper压缩包得到其安装文件夹
|--在zookeeper安装文件夹的目录下新建一个data文件夹用于存储注册中心运行时的临时文件
|--将zookeeper安装文件夹下conf文件夹下的zoo_sample.cfg复制一份并重命名为zoo.cfg
|--编辑zoo.cfg文件,具体编辑内容如下
|--修改dataDir的属性值为我们新建的data文件路径
|--新建一个admin.serverPort属性,并自定义一个值
|--这项操作是因为注册中心启动除了占用自己的端口号还会占用8080端口号,故手动给其一个占用端口以释放8080
|--在zookeeper安装文件夹下bin文件夹路径下执行./zkServer.sh start即可启动注册中心
|--编写接口模块
|--将需要用到的实体类都在该模块中进行编写并进行序列化
|--将需要用到的业务层功能接口都在该模块中进行编写
|--编写完成后将该模块打成jar包放入本地maven仓库,便于后期提供者、消费者模块调用
|--编写提供者模块
|--确保该模块已经搭建好了springweb的基本环境
|--引入dubbo依赖以及编写好的接口模块依赖
|--引入curator-framework依赖(即注册中心的依赖)
|--在spring的核心配置文件中配置dubbo,具体格式如下
|--<dubbo:application name="XX"/>
|--XX为自定义的dubbo服务名,注意要确保唯一性
|--<dubbo:protocol name="XX" port="YY"/>
|--XX用于设置对外暴露的协议名,一般使用dubbo
|--YY用于设置对外暴露的端口号,一般使用20880
|--<dubbo:registry address="zookeeper://XX:YY"/>
|--XX为注册中心服务对应的ip地址
|--YY为注册中心服务对应的端口号
|--<dubbo:service interface="XX" ref="YY" version="ZZ" timeout="KK"/>
|--XX为接口模块中功能接口的全限定类名
|--YY为实现接口模块中功能接口的实现类bean的别名
|--ZZ用于设置该服务的版本号
|--设置版本号是为了区分统一接口下的不同实现类
|--KK用于设置超时时间
|--编写消费者模块
|--确保该模块已经搭建好了springweb的基本环境
|--引入dubbo依赖以及编写好的接口模块依赖
|--引入curator-framework依赖(即注册中心的依赖)
|--在spring的核心配置文件中配置dubbo,具体格式如下
|--<dubbo:application name="XX"/>
|--XX为自定义的dubbo服务名,注意要确保唯一性
|--<dubbo:registry address="zookeeper://XX:YY">
|--XX为注册中心服务对应的ip地址
|--YY为注册中心服务对应的端口号
|--<dubbo:reference id="XX" interface="YY" ZZ="ZZ" timeout="KK"/>
|--XX用于自定义所请求到的提供者模块中的实现类在本模块中的bean别名
|--YY为接口模块中功能接口的全限定类名
|--ZZ为需要调用服务的版本号
|--设置版本号是为了区分统一接口下的不同实现类
|--KK用于设置超时时间
|--可以理解为其实注册中心就是起到代替我们去访问提供者所暴露接口的作用
配置监控中心:
|--下载监控中心源码文件
|--下载地址:https://github.com/apache/dubbo-admin
|--注意下载时要将目录切到develop目录下
|--进入dubbo-admin-develop\dubbo-admin-server\src\main\resources目录
|--修改application.properties 配置文件,修改内容如下
|--admin.registry.address=zookeeper://XX:YY
|--XX为zookeeper注册中心的ip地址
|--YY为zookeeper注册中心的端口号
|--admin.config-center=zookeeper://XX:YY
|--XX为zookeeper注册中心的ip地址
|--YY为zookeeper注册中心的端口号
|--admin.metadata-report.address=zookeeper://XX:YY
|--XX为zookeeper注册中心的ip地址
|--YY为zookeeper注册中心的端口号
|--在dubbo-admin-develop目录下执行mvn clean package打包命令
|--切换到dubbo-Admin-develop\dubbo-admin-distribution\target目录下
|--执行java -jar .\dubbo-admin-0.1.jar命令即可启动监控中心服务端
|--在dubbo-admin-ui目录下执行npm run dev命令启动监控中心页面端
|--通过http://localhost:8081/即可访问监控中心