DUBBO学习心得
项目环境版本: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-master\dubbo-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-master\dubbo-admin\src\main\resources文件 修改
application.properties文件
8.1.1 记住端口号
8.1.2 注册中心地址修改到linux地址中zookeeper地址 然后保存

8.1 Cmd到dos命令窗口
8.2 打开D:\dubbo-admin-master\dubbo-admin\target 文件夹 可以看到搭建监控中心的时候执行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项目了
DUBBO学习心得的更多相关文章
- dubbo学习小结
dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
随机推荐
- metaspolit下UAC提权以及日志清除
在获得webshell时但权限不够大,这时候为了完全获得受害者机器的权限,使用msf进行后渗透. 一.获取Meterpreter会话 Meterpreter 是msf的一个payload,目标执行之后 ...
- 【揭秘】C语言类型转换时发生了什么?
ID:技术让梦想更伟大 作者:李肖遥 链接:https://mp.weixin.qq.com/s/ZFf3imVaJgeesuhl1Kn9sQ 在C语言中,数据类型指的是用于声明不同类型的变量或函数的 ...
- web自动化 -- js操作(滑动屏幕、修改页面)
一.selenium对 js 的操作方法 1.先定义 js 操作 或者 定义 目标元素 2.执行 js 操作: driver.execute_script(js操作) 或者 ...
- CCNA - Part12 - 路由协议 (1) - 静态路由,动态路由 RIP
路由器 在之前关于路由器的介绍中,我们知道它是网络互联的核心设备,用于连接不同的网络,在网络之间转发 IP 数据报.对于路由器来说,路由表是其内部最为重要的构成组件.当路由器需要转发数据时,就会按照路 ...
- 《Python金融大数据分析》高清PDF版|百度网盘免费下载|Python数据分析
<Python金融大数据分析>高清PDF版|百度网盘免费下载|Python数据分析 提取码:mfku 内容简介 唯一一本详细讲解使用Python分析处理金融大数据的专业图书:金融应用开发领 ...
- ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by /usr/local/python37/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
一 问题背景 这个错误的出现往往与我前面的一篇文章 ImportError: /lib64/libm.so.6: version `CXXAB_1.3.8.' not found (required ...
- Day11_基本搜索
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...
- 第一部分_Mac技巧
原文是"池建强"的微信文章,公众号为"MacTalk" 第一天 直接在终端里输入 $ say "英文单词",Mac就会拼读该单词 第二天 使 ...
- PHP date_parse() 函数
------------恢复内容开始------------ 实例 返回一个包含指定日期的详细信息的关联数组: <?phpprint_r(date_parse("2013-05-01 ...
- 【问题记录】springMVC @Valid使用不生效问题
问题描述 在网上找到如何使用@Valid注解后,就把用到的配置和jar包加上,然后测试发现一直不生效.下面是配置及解决方法 配置 1.引入依赖 2.添加相应的配置(springmvc配置文件) < ...