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学习心得( ...
随机推荐
- 不是吧,阿sir,2020年程序员要不好过?
自从网传程序员到了35岁之后必须要转行,现在又有人传言:“疫情之下,程序员今年要过苦日子了,降薪裁员是大趋势.” 不是,我就不明白了,你们怎么就看不得程序员好呢?天天巴望着程序员降薪.转行.裁员… ...
- P3756 [CQOI2017]老C的方块
题目链接 看到网格图+最优化问题,当然要想黑白染色搞网络流.不过这道题显然无法用黑白染色搞定. 仔细观察那四种图形,发现都是蓝线两边一定有两个格子,两个格子旁边一定还有且仅有一个格子.因此我们可以这么 ...
- 题解 洛谷 P5814 【[CTSC2001]终极情报网】
读完题后不难看出本题是个网络流模型,源点流出的总流量为\(k\),源点向每个和总部直接联系的间谍连边,每个间谍向其能传递的间谍连容量为\(m\)的边,能与德军情报部进行联系的间谍向汇点连容量为\(in ...
- 新阿里云服务器从0开始配置为python开发环境
由于每次打开linux虚拟机比较麻烦,于是尝试一下云服务器,在阿里云领取了一个月的试用服务器,这里记录一下新服务器从0配置成python开发环境的步骤,以便以后配置新服务器时有个参考. 免费领取一个月 ...
- thymeleaf js绑定多个变量参数
写法一: <img th:src="@{/css/bianji.png}" th:onclick="|viewById('${user.id}','${user.i ...
- 《闲扯Redis七》Redis字典结构的底层实现
一.前言 上节<闲扯Redis六>Redis五种数据类型之Hash型 中说到 Hash(哈希对象)的底层实现有: 1.ziplist 编码的哈希对象使用压缩列表作为底层实现 2.hasht ...
- 集合和Iterator迭代器
集合 集合是java中提供的一种容器,可以用来存储多个数据. 注意: ①.集合只能存放对象.比如你存一个 int 型数据 1放入集合中, 其实它是自动转换成 Integer 类后存入的,Java中每一 ...
- 学习python的几个资料网站
菜鸟教程 https://www.runoob.com/python3/python3-tutorial.html https://www.runoob.com/python/python-tutor ...
- Python globals和locals函数_reload函数
Python globals和locals函数_reload函数: globals( ): 返回所有能够访问到的全局名字 num = 5 sum = 0 def add(num): func_sum ...
- Python unichr() 函数
描述 unichr() 函数 和 chr() 函数功能基本一样, 只不过是返回 unicode 的字符.高佣联盟 www.cgewang.com 注意: Python3 不支持 unichr(),改用 ...