项目环境版本:dubbo2.5.10 spring版本4.3.10
一 SOA
1英文名称(Service Oriented Ambiguity)
2 中文名称:面向服务架构
2.1 有一个专门提供服务单元
2.2 其他所有单元都调用这个服务
3 SOA定位:
3.1如何设计项目,让开发时更有效率
3.2 SOA是一种思想
4之前项目架构
4.1在公司项目不允许所有项目都访问数据库
4.2开发时,数据库访问层代码可能出现冗余
5 使用SOA架构
5.1专门访问数据库服务(项目)
5.2开发时可以实现,数据访问控制和代码复用
6 实现SOA架构时,常用服务
6.1 Dubbo作为服务
6.2 webservice做为服务
6.3 Dubbox作为服务
6.4 服务方就是web项目,调用web项目的控制器
6.4.1使用HttpClient可以调用其他项目的控制器
二 RPC
- 英文名称(Remote Procedure Call Protocol)
- 中文名称:远程过程调用协议
- RPC解析:客户端(A)通过互联网调用远程服务器,不知道远程服务器具体实现,只知道远程服务器提供了什么功能
- RPC最大优点:
4.1 数据安全性
三 Dubbo简介
- Dubbo:一个分布式,高性能,透明化的RPC服务框架
- 作用:提供服务自动注册,自动发现等高效服务治理方案
- Dubbo架构图:
3.1 Provider:提供者,服务发布方
3.2 Consumer:消费者,调用服务方
3.3 Container:Dubbo容器 依赖于spring容器
3.4 Registry:注册中心 当Container启动时把所有可以提供的服务列表上Registry中进行注册
3.4.1作用:告诉Consumer提供了什么服务和服务方在哪里
3.5 Monitor:监听器
3.6 虚线都是异步访问,实线都是同步访问
3.7 蓝色虚线:在启动时完成的功能
3.8 红色虚线(实线)都是程序运行过程中执行的功能
3.9 所有的角色都是可以在单独的服务器上,所以必须遵守特定的协议
四 Dubbo支持的注册中心
1 zookeeper:
1.1 优点:支持网络集群
1.2 缺点:稳定性受限于zookeeper
2 redis:
2.1 优点:性能高
2.2 缺点:对服务器环境要求较高
3 Muticast
3.1 面中心化不需要额外安装软件
3.2 缺点:建议同机房内使用
4 simple :适用于测试环境 不支持集群
五zookeeper
1 zookeeper分布式协调组件 本质是软件
2 常用功能
2.1 发布订阅功能,一般作为注册中心
2.2 分布式/集群管理功能
3 使用java语言编写的
六Dubbo支持的协议
1 Dubbo
1.1 Dubbo官方推荐的协议
1.2 本质:使用NIO和线程池进行处理
1.3 缺点:大文本传输时可能会出现传输失败的问题
2 RMI
2.1 JDK提供的协议,远程方法调用协议
2.2缺点:偶尔连接失败
2.3 优点:JDK原生不需要进行额外配置(导入jar)
3 Hession
3.1 基于Http协议 Http请求支持
3.2 需要额外导入jar,并且在短连接时性能低
七 Dubbo监控中心搭建
1 https://github.com/apache/dubbo-admin/tree/master 下载
2 解压到D盘 D:dubbo-admin-master
3在此文件夹下打开dos 然后执行命令 mvn clean package
3.1一定要注意这个是maven命令 所以要在windows path环境变量中配置
4 D:dubbo-admin-masterdubbo-monitor-simple 这个文件夹下会出现一个target
5 进去找到dubbo-monitor-simple-2.0.0-assembly.tar.gz
放入linux系统中usr/local/tmp下
解压移动到/usr/local/dubbo-monitor 操作如下:
tar -zxvf dubbo-monitor-simple-2.0.0-assembly.tar.gz
mv dubbo-monitor-simple-2.0.0 ../dubbo-monitor
6 修改配置文件 vim /usr/local/dubbo-monitor/conf/dubbo.properties 修改下面两处成这样
第一处是注册中心为zookeeper 有些配置文件不是zookeeper 反正本人的不需要修改
7 第二个是访问端口号原本是8080 和tomcat冲突 改成8088了
8 放开8080端口 然后在windows访问
操作 vim /etc/sysconfig/iptables
然后添加后面红框
这是目前最新的监控中心了 很开心 摸索一天
八 Dubbo admin的搭建
8.1 打开D:dubbo-admin-masterdubbo-adminsrcmain esources文件 修改
application.properties文件
8.1.1 记住端口号
8.1.2 注册中心地址修改到linux地址中zookeeper地址 然后保存
8.1 Cmd到dos命令窗口
8.2 打开D:dubbo-admin-masterdubbo-admin arget 文件夹 可以看到搭建监控中心的时候执行mvn clean package命令生成的jar包dubbo-admin-0.0.1-SNAPSHOT.jar
8.3 java -jar dubbo-admin-0.0.1-SNAPSHOT.jar执行
8.4 执行成功之后启动 http://localhost:7001/ 端口就是刚才的8.1.2下记录的7001
九 Dubbo中provider搭建
1 新建maven项目dubbo_service 里面只有接口
1.1因为RPC框架不希望消费者知道具体实现,如果实现类和接口在同一个项目中,Consumer依赖这个项目时就会知道是爱心类的具体实现。
2 新建maven项目dubbo_provider 依赖于接口项目dubbo_service ,写接口的实现类
3 引入jar包
<dependencies> <dependency> <groupId>com.kevin</groupId> <artifactId>dubbo_service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.10</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --> <!-- https://mvnrepository.com/artifact/com.101tec/zkclient --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> </dependency> </dependencies> |
记住 一定要依赖zkclient 注册中心zookeeper客户端
4 配置文件
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 当前提供者的名字 --> <dubbo:application name="demo_provider"/> <!-- 监控中心 --> <dubbo:registry address="zookeeper://192.168.0.100:2181" /> <!-- 配置协议端口 --> <dubbo:protocol name="dubbo" port="20880"/> <!-- service --> <bean id="demoService" class="com.kevin.service.impl.DemoServiceImpl"/> <!-- 注册功能 --> <dubbo:service interface="com.kevin.service.DemoService" ref="demoService"/> </beans> |
<!-- 当前提供者的名字 --> <dubbo:application name="demo_provider"/> <!-- 监控中心 --> <dubbo:registry address="zookeeper://192.168.0.100:2181" /> <!-- 配置协议端口 --> <dubbo:protocol name="dubbo" port="20880"/> <!-- service --> <bean id="demoService" class="com.kevin.service.impl.DemoServiceImpl"/> <!-- 注册功能 --> <dubbo:service interface="com.kevin.service.DemoService" ref="demoService"/> |
4.1注意事项:因为阿里巴巴把dubbo开源给了apache 所以 xml引入的文件如果是apache的话 一定要导入dubbo-2.6以上的包否则会报无异常 如果是
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
一定要是dubbo-2.5以下版本的jar依赖
5 main 方法实现
public static void main(String[] args) throws IOException { //System.setProperty("java.net.preferIPv4Stack", "true"); ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("provider.xml"); ac.start(); System.out.println("Provider started"); System.in.read(); } |
第二种实现xml文件必须放在指定文件夹下面(resources/META-INF/spring/provider.xml)
注意:只有使用这种路径下 使用assembly插件打包才能正常的打tar.gz包 使用其他路径打出的包都是不正常的(踩了好多次坑)
public static void main(String[] args) throws IOException { //System.setProperty("java.net.preferIPv4Stack", "true"); /*ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("provider.xml"); ac.start(); System.out.println("Provider started"); System.in.read();*/ Main.main(args); } |
十 消费者consumer的搭建(web项目)
1 首先pom文件 在之前搭建的ssm中 假如dubbo和zkclient 注意版本是2.5.10 这样spring版本要保持在4.3.10 也可以单独引用对于的spring版本 将dubbo中的spring依赖去除
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.10</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --> <!-- https://mvnrepository.com/artifact/com.101tec/zkclient --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.11</version> </dependency> |
2 xml编写
<DUBBO:APPLICATION>:当前项目名称
<DUBBO:REGISTRY>:使用的监控中心:消费者要从监控中心寻找到提供者接口信息 然后调用提供者接口
<DUBBO:ANNOTATION>:DUBBO接口扫描 可以扫描@Reference 注解以此调用provider的接口 (注意包名不要和提供者的包名一样 会起冲突编译报错)
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 当前提供者的名字 --> <dubbo:application name="demo_consumer"/> <!-- 监控中心 --> <dubbo:registry address="zookeeper://192.168.0.100:2181" /> <!-- service --> <dubbo:annotation package="com.kevin.dubbo.service.impl"/> </beans> |
3调用代码(扫描包下使用 注意包名不要和提供者的包名一样 会起冲突编译报错)@Reference注解可以知道是dubbo提供者接口
@Reference private DemoService demoService; @Override public void test() { String name = demoService.getName("徐佳文"); System.out.println(name); } |
4 引入dubbo配置文件
将xml改名成 applicationContext.dubbo.xml 然后修改web.xml信息spring配置文件一样处理 使用通配符*
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xml</param-value> </context-param> |
5 运行
5.1首先对接口项目打包 因为要依赖 右键 dubbo-service run as-->maven install
5.2 启动提供者 main项目下run application
5.3 启动项目 (要记住 原项目的视图层写好 )
5.5 访问到指定的视图 成功
十一:提供者接口打包 可以直接手动随时随地启动
1 引入assembly插件
<build> <plugins> <!-- 指定项目的打包插件信息 --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <!-- 指定打包描述文件的位置:相对项目根目录的路径 --> <!-- assembly打包的描述文件 --> <descriptor>src/main/assembly/assembly.xml</descriptor> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> |
在main下创建xml文件
2 编写xml 可以直接copy dubbo-monitor-simple下的同名的xml
下图红色的可以自定义 在对应的路径下创立想要的文件夹 然后复制 dubbo-monitor-simple项目下的 文件 下载方式在 本文档目录:七 监控中心搭建中
<assembly> <id>assembly</id> <formats> <format>tar.gz</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <fileSet> <directory>src/main/resources/assembly/bin</directory> <outputDirectory>assembly.bin</outputDirectory> <fileMode>0755</fileMode> </fileSet> <fileSet> <directory>src/main/resources/conf</directory> <outputDirectory>assembly.conf</outputDirectory> <fileMode>0644</fileMode> </fileSet> </fileSets> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> </dependencySet> </dependencySets> </assembly> |
3 新建目录结构如下 其中bin下和conf下的文件都是copy的
记住清空dubbo.properties( provider.xml一定要 配置对应的目录中 不然打的包不起作用)
4 点击项目 右键run as--> maven clean 然后--> maven install 然后刷新项目在target下会找到项目的 tar.gz后缀的文件
4.1 解压到任一位置
4.2 进入后缀是bin的文件夹
4.2.1 其中sh是linux运行的 bat是windows运行的 双击start.bat
正常启动之后,可以直接跑consumer项目了