项目环境版本: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. 下载spring的路径的文章,已经试用没问题

    文章:https://blog.csdn.net/ethan__xu/article/details/80273249 spring jar下载路径 http://repo.spring.io/rel ...

  2. 关于SignalR 进行双向多步对话

    关于ASP.NET SignalR 解释百度百科是这样说的: ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...

  3. pandas之数值计算与统计

    数值计算与统计 对于DataFrame来说,求和.最大.最小.平均等统计方法,默认是按列进行统计,即axis = 0,如果添加参数axis = 1则会按照行进行统计. 如果存在空值,在统计时默认会忽略 ...

  4. Linux系统zabbix_agentd客户端安装与配置

    标注:官网下载zabbix安装包(zabbix安装包里包含了zabbix_agentd客户端安装包,我们只选择zabbix_agentd客户端安装) zbbix官网下载地址:  http://www. ...

  5. Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'c.id'

    打开mysql客户端,输入 select @@global.sql_mode 再执行 set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DA ...

  6. Day06_商品分类(vuetify-nginx-cors)与品牌查询

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  7. JVM详解之:HotSpot VM中的Intrinsic methods

    目录 简介 什么是Intrinsic Methods 内置方法的特点 多样性 兼容性 java语义的扩展 Hotspot VM中的内置方法 intrinsic方法和内联方法 intrinsic方法的实 ...

  8. PHP addAttribute() 函数

    实例 给根元素和 body 元素添加一个属性: <?php$note=<<<XML<note>高佣联盟 www.cgewang.com<to>Tove& ...

  9. Skill 扫描list中是否含有某元素

    https://www.cnblogs.com/yeungchie/ code procedure(ycInListp(scan keylist) prog((times) times = 0 for ...

  10. MediaStreamConstraints对象

    MediaStreamConstraints对象作用是在调用getUserMedia()时用于指定应在返回的MediaStream中包括哪些轨道,以及(可选)为这些轨道的设置约束. 属性 audio布 ...