项目环境版本: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

  1. 英文名称(Remote Procedure Call Protocol)
  2. 中文名称:远程过程调用协议
  3. RPC解析:客户端(A)通过互联网调用远程服务器,不知道远程服务器具体实现,只知道远程服务器提供了什么功能
  4. RPC最大优点:

4.1 数据安全性

 

三 Dubbo简介

  1. Dubbo:一个分布式,高性能,透明化的RPC服务框架
  2. 作用:提供服务自动注册,自动发现等高效服务治理方案
  3. 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学习心得的更多相关文章

  1. dubbo学习小结

    dubbo学习小结 参考: https://blog.csdn.net/paul_wei2008/article/details/19355681 https://blog.csdn.net/liwe ...

  2. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  3. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  7. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  9. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

随机推荐

  1. 2万字长文包教包会 JVM 内存结构 保姆级学习笔记

    写这篇的主要原因呢,就是为了能在简历上写个"熟悉JVM底层结构",另一个原因就是能让读我文章的大家也写上这句话,真是个助人为乐的帅小伙....嗯,不单单只是面向面试学习哈,更重要的 ...

  2. C++语法小记---重载逗号操作符

    重载逗号操作符 逗号操作符算法:从左到右依次计算每一个表达式的值,整个逗号表达式的值等于最右边表达式的值,前面n-1个表达式可以没有返回值 重载逗号操作符: 参数必须有一个class成员 重载函数返回 ...

  3. Webpack前世今生

    在正式介绍Webpack之前,先给大家说明一下前端为什么需要模块化 1.为什么需要模块化 1.1JS原始功能 在网页开发的早期,js制作作为一种脚本语言,做一些简单的表单验证或动画实现等,那个时候代码 ...

  4. 死磕Spring源码之AliasRegistry

    死磕Spring源码之AliasRegistry 父子关系 graph TD; AliasRegistry-->BeanDefinitionRegistry; 代码实现 作为bean定义的最顶层 ...

  5. DDD之5限界上下文-定义领域边界的利器

    上图是一张普通地图,最刺眼的就是边界? 非常好奇地图绘制工程师是如何描绘如此弯曲多变的边界的?强制行政区域还是人群历史原因自然的人以群分? 我们再换个视角,对工程师或者架构师来说,微服务的边界如何划分 ...

  6. Monster Audio 使用教程 (五) 添加区域效果器

    我们可以在音轨上,某一个时间区域内,添加一组效果器,这组效果器,只有在播放指针进入它的区域时,效果器才可以处理声音 首先,先在时间刻度上,设定好时间范围 然后,在音轨的波形区域点击右键,然后点击[添加 ...

  7. React Native 中使用Redux

    参考https://jspang.com/detailed?id=48和印度同事的代码简单整理一下在RN中使用Redux的步骤 1. 首先我们应该先了解Redux是什么,什么情况下需要用到它 在Red ...

  8. MySQL组复制MGR(四)-- 单主模式与多主模式

    (一)概述 组复制可以运行在单主模式下,也可以运行在多主模式下,默认为单主模式.组的不同成员不能部署在不同模式下,要切换模式,需要使用不同配置重新启动组而不是单个server. 相关参数如下: # 该 ...

  9. Python JSON的基本使用

    Python JSON的基本使用 一.json格式介绍 JSON(JavaScript Object Notation) 通用的数据类型,易于人阅读和编写. 跟字典有些类似,形式也是key-value ...

  10. Qt子类化后qss设置背景色无效的问题

    1.问题背景 在某个类中,用到了一个组合的widget,有按钮进度条等,类似于视频播放器按钮控制区和精度条(参考了很多feiyangqingyun的文章,感谢),调试正常后整理代码,为了提高代码可读性 ...