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

  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 解压到DD:dubbo-admin-master

 

3在此文件夹下打开dos  然后执行命令 mvn clean package  

 

 

3.1一定要注意这个是maven命令 所以要在windows path环境变量中配置

 

 

4 D:dubbo-admin-masterdubbo-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-masterdubbo-adminsrcmain esources文件 修改

application.properties文件

8.1.1 记住端口号

8.1.2 注册中心地址修改到linux地址中zookeeper地址 然后保存

 

8.1 Cmddos命令窗口

8.2 打开D:dubbo-admin-masterdubbo-admin arget 文件夹  可以看到搭建监控中心的时候执行mvn clean package命令生成的jardubbo-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 其中shlinux运行的 batwindows运行的 双击start.bat

 

正常启动之后,可以直接跑consumer项目了

 

 

 

原文地址:https://www.cnblogs.com/jiawenxu/p/13507889.html