项目环境版本: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. 基于Python爬虫采集天气网实时信息

      相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...

  2. spring学习(七)spring整合JDBC

    Spring中封装了一个可操作数据库的对象,该对象封装了JDBC技术 使用数据库 一.导包(IDEA的maven工程,在pom.xml文件中导入依赖,必须注意依赖,不然会报各种异常) <?xml ...

  3. 前端学习(三):body标签(一)

    进击のpython ***** 前端学习--body标签 body中的相关标签,因为是主要展现在页面的内容区域 所以相对来说内容多,杂,要背记的部分很多 当学完这节的内容之后,你可以试着写一片精致的文 ...

  4. ~~网络编程(三):TCP/UDP~~

    进击のpython ***** 网络编程--TCP/UDP协议 其实你也发现了,应用层是交给应用来处理的,我们什么也做不了 相较于网络编程来说,我们更重要的是在做应用层和传输层的对接 因为你也看到了, ...

  5. laravel开发调试工具laravel-debugbar的安装

    一.使用 Composer 安装该扩展包 composer require barryvdh/laravel-debugbar --dev 二.(可选)修改配置文件app/config.php Lar ...

  6. Python之filter、map、reduce函数

    简介三函数: 高阶函数:一个函数可以接收另一个函数作为参数,这种函数称之为高阶函数. filter.map.reduce三个函数都是高阶函数,且语法都一致:filter/map/reduce(func ...

  7. 使用MacOS直播

    参考链接:https://www.jianshu.com/p/94f42a793a7e 参考链接:https://blog.dreamtobe.cn/live_guideline/ 所需软件  密码: ...

  8. Hyper-V设置固定IP

    win+x以管理员启动PowerShell 创建虚拟交换机,等同于在Hyper-V管理器界面中新建虚拟网络交换机 New-VMSwitch -SwitchName "NAT-VM" ...

  9. PHP decbin() 函数

    实例 把十进制转换为二进制: <?phpecho decbin("3") . "<br>";echo decbin("1" ...

  10. Android Studio中如何使用自定义的framework库

    在安卓app开发中,通常不会遇到需要使用自定义framework库的情况,使用的都是标准的内核库.但也有例外,比如针对定制化的ROM,ROM厂商可能在ROM中对安卓源码做过修改,对应用层app暴露出与 ...