zoukankan      html  css  js  c++  java
  • 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项目了

     

     

     

  • 相关阅读:
    python第二十四课——set中的函数
    python第二十三课——dict中的函数
    python第二十二课——list函数
    10 编译PHP并与nginx整合
    09 nginx Rewrite(重写)详细解析
    07 nginx Location之正则匹配
    06 nginx Location详解之精准匹配
    JQ 修改样式
    05 nginx定时任务完成日志切割
    linux 时间与本地时间不对应解决办法
  • 原文地址:https://www.cnblogs.com/jiawenxu/p/13507889.html
Copyright © 2011-2022 走看看