项目环境版本: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. 不是吧,阿sir,2020年程序员要不好过?

    自从网传程序员到了35岁之后必须要转行,现在又有人传言:“疫情之下,程序员今年要过苦日子了,降薪裁员是大趋势.” 不是,我就不明白了,你们怎么就看不得程序员好呢?天天巴望着程序员降薪.转行.裁员…   ...

  2. P3756 [CQOI2017]老C的方块

    题目链接 看到网格图+最优化问题,当然要想黑白染色搞网络流.不过这道题显然无法用黑白染色搞定. 仔细观察那四种图形,发现都是蓝线两边一定有两个格子,两个格子旁边一定还有且仅有一个格子.因此我们可以这么 ...

  3. 题解 洛谷 P5814 【[CTSC2001]终极情报网】

    读完题后不难看出本题是个网络流模型,源点流出的总流量为\(k\),源点向每个和总部直接联系的间谍连边,每个间谍向其能传递的间谍连容量为\(m\)的边,能与德军情报部进行联系的间谍向汇点连容量为\(in ...

  4. 新阿里云服务器从0开始配置为python开发环境

    由于每次打开linux虚拟机比较麻烦,于是尝试一下云服务器,在阿里云领取了一个月的试用服务器,这里记录一下新服务器从0配置成python开发环境的步骤,以便以后配置新服务器时有个参考. 免费领取一个月 ...

  5. thymeleaf js绑定多个变量参数

    写法一: <img th:src="@{/css/bianji.png}" th:onclick="|viewById('${user.id}','${user.i ...

  6. 《闲扯Redis七》Redis字典结构的底层实现

    一.前言 上节<闲扯Redis六>Redis五种数据类型之Hash型 中说到 Hash(哈希对象)的底层实现有: 1.ziplist 编码的哈希对象使用压缩列表作为底层实现 2.hasht ...

  7. 集合和Iterator迭代器

    集合 集合是java中提供的一种容器,可以用来存储多个数据. 注意: ①.集合只能存放对象.比如你存一个 int 型数据 1放入集合中, 其实它是自动转换成 Integer 类后存入的,Java中每一 ...

  8. 学习python的几个资料网站

    菜鸟教程 https://www.runoob.com/python3/python3-tutorial.html https://www.runoob.com/python/python-tutor ...

  9. Python globals和locals函数_reload函数

    Python globals和locals函数_reload函数: globals( ): 返回所有能够访问到的全局名字 num = 5 sum = 0 def add(num): func_sum ...

  10. Python unichr() 函数

    描述 unichr() 函数 和 chr() 函数功能基本一样, 只不过是返回 unicode 的字符.高佣联盟 www.cgewang.com 注意: Python3 不支持 unichr(),改用 ...