zoukankan      html  css  js  c++  java
  • 1.Dubbo教程

    转自:https://blog.csdn.net/hellozpc/article/details/78575773

    2. 什么是dubbo

    2.1. 简介

    DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。Dubbo框架使得使用者可以像调用本地方法一样调用远程方法,而这一切只需要简单的配置。Dubbo完全兼容Spring配置方式注入,未来也会与Spring boot无缝整合。

    开发团队:

     

    2.2. RPC

     

    2.3. 官网

    http://dubbo.io/

     

    2.4. 版本说明

     

    2017年9月份,沉寂了5年之久的Dubbo重新得到维护!

    本教程基于2.5.7版本

    2.5. 下载

    Dubbo源码托管于github,并且将jar包发布到maven的中央仓库,所以可以从github和maven中央仓库来下载。

    2.5.1. 源码下载

    https://github.com/alibaba/dubbo

     

    2.5.2. 发布包下载

    http://repo1.maven.org/maven2/com/alibaba/dubbo/

     

    3. 通过Maven编译构建dubbo

    既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?我们先来看下dubbo的主要模块:

     

    其中,核心框架、管理控制台、简易监控中心、简易注册中心是我们需要的模块。目前只有核心模块jar包可以下载到,其它的均无法直接下载,所以我们需要构建dubbo。

    3.1. 导入源码到IDEA

    从githhub上下载dubbo源码得到dubbo-master.zip:

    https://github.com/alibaba/dubbo

     

    解压压缩包:

     

    导入源码到IDEA:

     

    右侧Maven Projects有红色报错信息,报maven插件无法加载,这个不要紧,待会编译打包Reimport一下即可!

    如果POM文件有些划红线的地方也可不管,编译报错再详细分析。切勿编辑pom文件,可能造成一些换行等,编译pom文件会报无法解析(人品好的话编译不会报错,一次成功!)

    3.2. 构建dubbo

    在构建之前,各个源码包下面还没有target目录,构建成功之后,打好的jar包、war包会放到默认的输出目录下的target目录下。

     

    配置运行参数:

     

     

    点击运行按钮开始构建。

    第一次构建耗时比较长,要联网下载许多jar包(建议使用阿里云的maven仓库)

    maven_settings.xml中配置:

    1 <mirrors>
    2 <mirror>
    3 <id>nexus-aliyun</id>
    4 <mirrorOf>*</mirrorOf>
    5 <name>Nexus aliyun</name>
    6 <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    7 </mirror>
    8 </mirrors>

    构建完成:

     1 [INFO] Reactor Summary:
     2 [INFO]
     3 [INFO] dubbo-parent ....................................... SUCCESS [  0.171 s]
     4 [INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [  6.314 s]
     5 [INFO] dubbo-common ....................................... SUCCESS [  6.943 s]
     6 [INFO] dubbo-container .................................... SUCCESS [  0.005 s]
     7 [INFO] dubbo-container-api ................................ SUCCESS [  1.129 s]
     8 [INFO] dubbo-container-spring ............................. SUCCESS [  1.416 s]
     9 [INFO] dubbo-container-jetty .............................. SUCCESS [  1.341 s]
    10 [INFO] dubbo-container-log4j .............................. SUCCESS [  1.343 s]
    11 [INFO] dubbo-container-logback ............................ SUCCESS [  1.416 s]
    12 [INFO] dubbo-remoting ..................................... SUCCESS [  0.004 s]
    13 [INFO] dubbo-remoting-api ................................. SUCCESS [  4.595 s]
    14 [INFO] dubbo-remoting-netty ............................... SUCCESS [  2.015 s]
    15 [INFO] dubbo-remoting-mina ................................ SUCCESS [  1.652 s]
    16 [INFO] dubbo-remoting-grizzly ............................. SUCCESS [  0.925 s]
    17 [INFO] dubbo-remoting-p2p ................................. SUCCESS [  1.690 s]
    18 [INFO] dubbo-remoting-http ................................ SUCCESS [  0.965 s]
    19 [INFO] dubbo-remoting-zookeeper ........................... SUCCESS [  1.657 s]
    20 [INFO] dubbo-remoting-netty4 .............................. SUCCESS [  2.108 s]
    21 [INFO] dubbo-rpc .......................................... SUCCESS [  0.004 s]
    22 [INFO] dubbo-rpc-api ...................................... SUCCESS [  2.920 s]
    23 [INFO] dubbo-rpc-default .................................. SUCCESS [  2.990 s]
    24 [INFO] dubbo-rpc-injvm .................................... SUCCESS [  1.493 s]
    25 [INFO] dubbo-rpc-rmi ...................................... SUCCESS [  1.602 s]
    26 [INFO] dubbo-rpc-hessian .................................. SUCCESS [  1.681 s]
    27 [INFO] dubbo-rpc-http ..................................... SUCCESS [  0.784 s]
    28 [INFO] dubbo-rpc-webservice ............................... SUCCESS [  1.870 s]
    29 [INFO] dubbo-cluster ...................................... SUCCESS [  3.492 s]
    30 [INFO] dubbo-registry ..................................... SUCCESS [  0.005 s]
    31 [INFO] dubbo-registry-api ................................. SUCCESS [  2.279 s]
    32 [INFO] dubbo-monitor ...................................... SUCCESS [  0.004 s]
    33 [INFO] dubbo-monitor-api .................................. SUCCESS [  1.530 s]
    34 [INFO] dubbo-filter ....................................... SUCCESS [  0.004 s]
    35 [INFO] dubbo-filter-validation ............................ SUCCESS [  0.899 s]
    36 [INFO] dubbo-filter-cache ................................. SUCCESS [  0.822 s]
    37 [INFO] dubbo-registry-default ............................. SUCCESS [  1.977 s]
    38 [INFO] dubbo-monitor-default .............................. SUCCESS [  1.567 s]
    39 [INFO] dubbo-registry-multicast ........................... SUCCESS [  1.674 s]
    40 [INFO] dubbo-config ....................................... SUCCESS [  0.004 s]
    41 [INFO] dubbo-config-api ................................... SUCCESS [  3.004 s]
    42 [INFO] dubbo-config-spring ................................ SUCCESS [  3.852 s]
    43 [INFO] dubbo-rpc-thrift ................................... SUCCESS [  3.846 s]
    44 [INFO] dubbo-rpc-memcached ................................ SUCCESS [  0.790 s]
    45 [INFO] dubbo-rpc-redis .................................... SUCCESS [  0.828 s]
    46 [INFO] dubbo-registry-zookeeper ........................... SUCCESS [  1.580 s]
    47 [INFO] dubbo-registry-redis ............................... SUCCESS [  1.641 s]
    48 [INFO] dubbo .............................................. SUCCESS [ 39.232 s]
    49 [INFO] dubbo-simple ....................................... SUCCESS [  0.005 s]
    50 [INFO] dubbo-registry-simple .............................. SUCCESS [  4.940 s]
    51 [INFO] dubbo-monitor-simple ............................... SUCCESS [  9.127 s]
    52 [INFO] dubbo-admin ........................................ SUCCESS [ 11.274 s]
    53 [INFO] dubbo-demo ......................................... SUCCESS [  0.004 s]
    54 [INFO] dubbo-demo-api ..................................... SUCCESS [  0.660 s]
    55 [INFO] dubbo-demo-provider ................................ SUCCESS [  3.590 s]
    56 [INFO] dubbo-demo-consumer ................................ SUCCESS [  3.541 s]
    57 [INFO] dubbo-test ......................................... SUCCESS [  0.004 s]
    58 [INFO] dubbo-test-benchmark ............................... SUCCESS [  4.688 s]
    59 [INFO] dubbo-test-compatibility ........................... SUCCESS [  0.041 s]
    60 [INFO] dubbo-test-integration ............................. SUCCESS [  0.044 s]
    61 [INFO] dubbo-test-examples ................................ SUCCESS [  3.082 s]
    62 [INFO] ------------------------------------------------------------------------
    63 [INFO] BUILD SUCCESS
    64 [INFO] ------------------------------------------------------------------------
    65 [INFO] Total time: 02:39 min
    66 [INFO] Finished at: 2017-11-19T14:33:11+08:00
    67 [INFO] Final Memory: 41M/163M
    68 [INFO] ------------------------------------------------------------------------

    3.3. 找到对应的模块包

    3.3.1. 核心框架

     

    3.3.2. 管理控制台

     

    3.3.3. 简易监控中心

     

    3.3.4. 简易注册中心

    4. Dubbo框架说明

    4.1. 背景

    4.2. 需求


    4.3. 架构

     

     

    调用关系

    1. 服务容器负责启动,加载,运行服务提供者。

    2. 服务提供者在启动时,向注册中心注册自己提供的服务。

    3. 服务消费者在启动时,向注册中心订阅自己所需的服务。

    4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    5. 快速入门

    5.1. 实现功能

    存在2独立的系统,A系统和B系统。A系统调用B系统暴露的接口获取数据,比如查询用户列表

     

    5.2. 安装zookeeper

    解压得到如下:

     

    修改配置文件conf/zoo.cfg:设置data目录,该目录必须存在

     

     

     双击zkServer启动zookeeper服务(cmd文件是windows脚本,sh文件是linux下的脚本):

     

    5.3. 搭建B系统(B模块)

    5.3.1. 创建工程

    新建一个maven项目

     

    新建模块

     


    上一步也可以不选骨架,这样生成的目录没有webapp目录,需要手动创建!并且手动改pom文件的packing类型为war

    <packaging>war</packaging>

     

    一路next,直到finish。

     

    5.3.2. 导入依赖

     


    编辑模块systemBpom文件:

    Dubbo核心jar可以先install到本地maven仓库。其实如果联网,一旦保存pom文件,maven工具会自动远程仓库下载

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     3     <parent>
     4         <artifactId>dubbodemo</artifactId>
     5         <groupId>cn.com.zpc</groupId>
     6         <version>1.0-SNAPSHOT</version>
     7     </parent>
     8     <modelVersion>4.0.0</modelVersion>
     9     <artifactId>systemB</artifactId>
    10     <packaging>war</packaging>
    11     <name>systemB Maven Webapp</name>
    12     <url>http://maven.apache.org</url>
    13     <dependencies>
    14         <dependency>
    15             <groupId>junit</groupId>
    16             <artifactId>junit</artifactId>
    17             <version>3.8.1</version>
    18             <scope>test</scope>
    19         </dependency>
    20         <!-- 采用spring配置方式使用dubbo,所以需要导入spring容器依赖-->
    21         <dependency>
    22             <groupId>org.springframework</groupId>
    23             <artifactId>spring-webmvc</artifactId>
    24             <version>4.3.10.RELEASE</version>
    25         </dependency>
    26         <dependency>
    27             <groupId>org.slf4j</groupId>
    28             <artifactId>slf4j-log4j12</artifactId>
    29             <version>1.6.4</version>
    30         </dependency>
    31         <dependency>
    32             <groupId>com.alibaba</groupId>
    33             <artifactId>dubbo</artifactId>
    34             <version>2.5.7</version>
    35             <!-- 排除传递spring依赖-->
    36             <exclusions>
    37                 <exclusion>
    38                     <artifactId>spring</artifactId>
    39                     <groupId>org.springframework</groupId>
    40                 </exclusion>
    41                 <exclusion>
    42                     <artifactId>spring-web</artifactId>
    43                     <groupId>org.springframework</groupId>
    44                 </exclusion>
    45                 <exclusion>
    46                     <artifactId>spring-beans</artifactId>
    47                     <groupId>org.springframework</groupId>
    48                 </exclusion>
    49                 <exclusion>
    50                     <artifactId>spring-context</artifactId>
    51                     <groupId>org.springframework</groupId>
    52                 </exclusion>
    53             </exclusions>
    54         </dependency>
    55     </dependencies>
    56     <build>
    57         <finalName>systemB</finalName>
    58         <plugins>
    59             <plugin>
    60                 <groupId>org.apache.tomcat.maven</groupId>
    61                 <artifactId>tomcat7-maven-plugin</artifactId>
    62                 <version>2.2</version>
    63                 <configuration>
    64                     <port>8081</port>
    65                     <path>/</path>
    66                 </configuration>
    67             </plugin>
    68         </plugins>
    69     </build>
    70 </project>

    5.3.3. 配置log4j文件

    resources下新建log4j.properties:

    1 log4j.rootLogger=DEBUG,A1
    2 log4j.appender.A1=org.apache.log4j.ConsoleAppender
    3 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    4 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

    5.3.4. 创建User对象

     1 package com.zpc.dubbo.systemb.pojo;
     2 public class Userimplements java.io.Serializable{
     3     private static final longserialVersionUID = -2668999087589887337L;
     4     privateLong id;
     5     privateString username;
     6     privateString password;
     7     privateInteger age;
     8     publicLong getId() {
     9         returnid;
    10     }
    11     public voidsetId(Longid) {
    12         this.id= id;
    13     }
    14     publicString getUsername() {
    15         returnusername;
    16     }
    17     public voidsetUsername(Stringusername) {
    18         this.username= username;
    19     }
    20     publicString getPassword() {
    21         returnpassword;
    22     }
    23     public voidsetPassword(Stringpassword) {
    24         this.password= password;
    25     }
    26     publicInteger getAge() {
    27         returnage;
    28     }
    29     public voidsetAge(Integerage) {
    30         this.age= age;
    31     }
    32 }

    5.3.5. 创建UserService(接口)并提供查询服务

    1 package com.zpc.dubbo.systemb.service;
    2 import com.zpc.dubbo.systemb.pojo.User;
    3 import java.util.List;
    4 public interface UserService{
    5     /**
    6      * 查询所有的用户数据
    7      */
    8     publicList<User>queryAll();
    9 }

    5.3.6. 创建UserServiceImpl实现类

     1 package com.zpc.dubbo.systemb.service.impl;
     2 import com.zpc.dubbo.systemb.pojo.User;
     3 import com.zpc.dubbo.systemb.service.UserService;
     4 import java.util.ArrayList;
     5 import java.util.List;
     6 public class UserServiceImplimplements UserService{
     7     /**
     8      * 实现查询,这里做模拟实现,不做具体的数据库查询
     9      */
    10     @Override
    11     publicList<User>queryAll() {
    12         List<User>list =new ArrayList<User>();
    13         for(inti =0;i <10;i++) {
    14             Useruser =new User();
    15             user.setAge(20+ i);
    16             user.setId(Long.valueOf(i+ 1));
    17             user.setPassword("123456");
    18             user.setUsername("username_"+ i);
    19             list.add(user);
    20         }
    21         returnlist;
    22     }
    23 }

    5.3.7. 编写dubbo配置文件

    dubbo-provider.xml

     

    具体配置

     1 <beansxmlns="http://www.springframework.org/schema/beans"
     2        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     3        xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     4    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     5     <!-- 提供方应用信息,用于计算依赖关系 -->
     6     <dubbo:applicationname="dubbo-b-provider"/>
     7     <!-- 这里使用的注册中心是zookeeper -->
     8     <dubbo:registryaddress="zookeeper://127.0.0.1:2181"client="zkclient"/>
     9     <!-- 用dubbo协议在20880端口暴露服务 -->
    10     <dubbo:protocolname="dubbo"port="20880"/>
    11     <!-- 将该接口暴露到dubbo中 -->
    12     <dubbo:serviceinterface="com.zpc.dubbo.systemb.service.UserService"ref="userServiceImpl"/>
    13     <!-- 将具体的实现类加入到Spring容器中 -->
    14     <beanid="userServiceImpl"class="com.zpc.dubbo.systemb.service.impl.UserServiceImpl"/>
    15 </beans>

    5.3.8. 导入zookeeper依赖

     1 <dependency>
     2 <groupId>org.apache.zookeeper</groupId>
     3 <artifactId>zookeeper</artifactId>
     4 <version>3.4.8</version>
     5 </dependency>
     6 <dependency>
     7 <groupId>com.github.sgroschupf</groupId>
     8 <artifactId>zkclient</artifactId>
     9 <version>0.1</version>
    10 </dependency>

    5.3.9. 编写Web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
     3 <display-name>dubbo-b</display-name>
     4 <context-param>
     5 <param-name>contextConfigLocation</param-name>
     6 <param-value>classpath:dubbo/dubbo-*.xml</param-value>
     7 </context-param>
     8 <!--Spring的ApplicationContext载入 -->
     9 <listener>
    10 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    11 </listener>
    12     <welcome-file-list>
    13      <welcome-file>index.jsp</welcome-file>
    14     </welcome-file-list>
    15 </web-app>

    5.3.10. 启动tomcat

    使用maven插件启动服务器:

     

    查看tomcat启动日志:

     

     1 2017-11-19 16:49:45,033 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO]Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
     2 2017-11-19 16:49:45,034 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO]Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
     3 2017-11-19 16:49:45,035 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[DEBUG] Session establishment request sent on 127.0.0.1/127.0.0.1:2181
     4 2017-11-19 16:49:45,190 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[INFO] Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x15fd342ea0c0000, negotiated timeout = 30000
     5 2017-11-19 16:49:45,191 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Received event: WatchedEvent state:SyncConnected type:None path:null
     6 2017-11-19 16:49:45,192 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[INFO] zookeeper state changed (SyncConnected)
     7 2017-11-19 16:49:45,192 [DubboZkclientConnector-EventThread] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Leaving process event
     8 2017-11-19 16:49:45,192 [DubboZkclientConnector] [org.I0Itec.zkclient.ZkClient]-[DEBUG] State is SyncConnected
     9 2017-11-19 16:49:45,194 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO]  [DUBBO]Register: dubbo://192.168.181.1:20880/com.zpc.dubbo.systemb.service.UserService?anyhost=true&application=dubbo-b-provider&dubbo=2.5.7&generic=false&interface=com.zpc.dubbo.systemb.service.UserService&methods=queryAll&pid=5564&side=provider×tamp=1511081384696, dubbo version: 2.5.7, current host: 127.0.0.1
    10 2017-11-19 16:49:45,209 [DubboZkclientConnector-SendThread(127.0.0.1:2181)] [org.apache.zookeeper.ClientCnxn]-[DEBUG] Reading reply sessionid:0x15fd342ea0c0000, packet:: clientPath:null serverPath:null finished:false header:: 1,3  replyHeader:: 1,569,-101  request:: '/dubbo/com.zpc.dubbo.systemb.service.UserService/providers,F  response::  

    可以看到,已经将UserService服务注册到zookeeper注册中心,协议采用的是dubbo

    Zookeeper控制台显示收到连接:

     

    5.4. 搭建A系统(A模块)

    5.4.1. 创建工程

    步骤可以参照搭建B系统!A系统创建完成

     

    5.4.2. 导入依赖

    A系统的pom文件:参考B系统,一模一样!

     

    5.4.3. 配置log4j文件

    1 log4j.properties(和B系统一样配置即可):
    2 log4j.rootLogger=DEBUG,A1
    3 log4j.appender.A1=org.apache.log4j.ConsoleAppender
    4 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    5 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

    5.4.4. B系统中拷贝User对象、UserService接口到A系统

    注意是从B系统完全拷贝到A系统,包名不能改动!

     

    5.4.5. 编写A系统的dubbo配置文件

    dubbo-consumer.xml:

     1 <beansxmlns="http://www.springframework.org/schema/beans"
     2        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     3        xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     4    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     5     <!-- 提供方应用信息,用于计算依赖关系 -->
     6     <dubbo:applicationname="dubbo-a-consumer"/>
     7     <!-- 这里使用的注册中心是zookeeper -->
     8     <dubbo:registryaddress="zookeeper://127.0.0.1:2181"client="zkclient"/>
     9     <!-- 从注册中心中查找服务 -->
    10     <dubbo:referenceid="userService"interface="com.zpc.dubbo.systemb.service.UserService"/>
    11 </beans>

    5.4.6. 编写UserService测试用例

     

     

     1 package com.zpc.dubbotest;
     2 import com.zpc.dubbo.systemb.pojo.User;
     3 import com.zpc.dubbo.systemb.service.UserService;
     4 import org.junit.Before;
     5 import org.junit.Test;
     6 import org.springframework.context.ApplicationContext;
     7 import org.springframework.context.support.ClassPathXmlApplicationContext;
     8 import java.util.List;
     9 public class TestUserService{
    10     privateUserService userService;
    11     @Before
    12     public voidsetUp()throws Exception{
    13         ApplicationContextapplicationContext =new ClassPathXmlApplicationContext(
    14                 "classpath:dubbo/*.xml");
    15         this.userService= applicationContext.getBean(UserService.class);
    16     }
    17     @Test
    18     public voidtestQueryAll() {
    19         List<User>users =this.userService.queryAll();
    20         for(Useruser :users) {
    21             System.out.println(user);
    22         }
    23     }
    24 }

    5.4.7. 查看效果

    (重写了UsertoString方法!)

    zookeeperB系统运行起来,再运行A系统的测试用例:

     

    可以看到已经查询到10条数据,那么,也就是说A系统通过B系统提供的服务获取到了数据。

    5.5. 解决代码重复问题

    通过刚刚的示例我们可以发现,其中User对象和UserServiceA系统和B系统中都使用,那么,我们是否应该将该代码复用,而不用硬拷贝?

    答案是肯定的。

    在使用dubboprovider需要将提供服务所需要的java代码(beaninterface等)单独打包成jar提供给consumer使用。

    5.5.1. 创建dubbo_systemB_api模块


    5.5.2. 将systemB中的pojoservice接口剪切到dubbo-systemB-api

    注意:B系统和A系统的pojoservice接口全部删除,全部直接依赖dubbo-systemB-api!

    5.5.3. 在systemBpom.xml文件中添加dubbo-systemB-api的依赖,并且将pojoservice接口删除

    1 <dependency>
    2     <groupId>cn.com.zpc</groupId>
    3     <artifactId>dubbo_systemB_api</artifactId>
    4     <version>1.0-SNAPSHOT</version>
    5 </dependency>

    修改dubbo-provider.xml

    1 <!-- 将该接口暴露到dubbo中 -->
    2 <dubbo:serviceinterface="com.zpc.systemb.api.service.UserService"ref="userServiceImpl"/>

    5.5.4. 在systemApom.xml文件中添加dubbo-systemB-api的依赖,并且将pojoservice接口删除

    1 <dependency>
    2     <groupId>cn.com.zpc</groupId>
    3     <artifactId>dubbo_systemB_api</artifactId>
    4     <version>1.0-SNAPSHOT</version>
    5 </dependency>

    修改dubbo-consumer.xml

    1 <!-- 从注册中心中查找服务 -->
    2 <dubbo:referenceid="userService"interface="com.zpc.systemb.api.service.UserService"/>

    此时目录结构如下(只有api包中保留接口和pojo类定义)

     

    5.5.5. 测试

    测试之前先rebuild项目!

     

    依次启动zookeeper和系统B,再运行系统A中的测试用例!

     

    测试发现和之前实现一样

     

    其实也可以把接口保留B系统中(毕竟B系统提供的服务嘛)。然后在A系统中直接依赖B系统的jar包即可。

    6. 管理界面

    dubbo提供了一套在线管理整个服务的功能,管理控制台为阿里内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。

    6.1. 安装

    dubbo-admin-2.5.7.war部署解压到tomcatwebapps目录下ROOT目录(删除里面的内容)里

     

    6.2. 修改配置文件

     

    6.3. 启动tomcat

     

     

     

    6.4. 查看管理界面

    使用如下用户登录(密码和用户名一致,root/root)

     

    登录http://127.0.0.1:8080/

    Tomcat端口未必是8080,看自己怎么配的。

    效果

     

     

    功能:

     

     

    提供者:

    消费者:

     

    应用:

     

    <!-- 从注册中心中查找服务 -->
    <dubbo:referenceid="userService"interface="com.zpc.systemb.api.service.UserService"/>

     

    [INFO] Reactor Summary:

    [INFO]

    [INFO] dubbo-parent ....................................... SUCCESS [  0.171 s]

    [INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [  6.314 s]

    [INFO] dubbo-common ....................................... SUCCESS [  6.943 s]

    [INFO] dubbo-container .................................... SUCCESS [  0.005 s]

    [INFO] dubbo-container-api ................................ SUCCESS [  1.129 s]

    [INFO] dubbo-container-spring ............................. SUCCESS [  1.416 s]

    [INFO] dubbo-container-jetty .............................. SUCCESS [  1.341 s]

    [INFO] dubbo-container-log4j .............................. SUCCESS [  1.343 s]

    [INFO] dubbo-container-logback ............................ SUCCESS [  1.416 s]

    [INFO] dubbo-remoting ..................................... SUCCESS [  0.004 s]

    [INFO] dubbo-remoting-api ................................. SUCCESS [  4.595 s]

    [INFO] dubbo-remoting-netty ............................... SUCCESS [  2.015 s]

    [INFO] dubbo-remoting-mina ................................ SUCCESS [  1.652 s]

    [INFO] dubbo-remoting-grizzly ............................. SUCCESS [  0.925 s]

    [INFO] dubbo-remoting-p2p ................................. SUCCESS [  1.690 s]

    [INFO] dubbo-remoting-http ................................ SUCCESS [  0.965 s]

    [INFO] dubbo-remoting-zookeeper ........................... SUCCESS [  1.657 s]

    [INFO] dubbo-remoting-netty4 .............................. SUCCESS [  2.108 s]

    [INFO] dubbo-rpc .......................................... SUCCESS [  0.004 s]

    [INFO] dubbo-rpc-api ...................................... SUCCESS [  2.920 s]

    [INFO] dubbo-rpc-default .................................. SUCCESS [  2.990 s]

    [INFO] dubbo-rpc-injvm .................................... SUCCESS [  1.493 s]

    [INFO] dubbo-rpc-rmi ...................................... SUCCESS [  1.602 s]

    [INFO] dubbo-rpc-hessian .................................. SUCCESS [  1.681 s]

    [INFO] dubbo-rpc-http ..................................... SUCCESS [  0.784 s]

    [INFO] dubbo-rpc-webservice ............................... SUCCESS [  1.870 s]

    [INFO] dubbo-cluster ...................................... SUCCESS [  3.492 s]

    [INFO] dubbo-registry ..................................... SUCCESS [  0.005 s]

    [INFO] dubbo-registry-api ................................. SUCCESS [  2.279 s]

    [INFO] dubbo-monitor ...................................... SUCCESS [  0.004 s]

    [INFO] dubbo-monitor-api .................................. SUCCESS [  1.530 s]

    [INFO] dubbo-filter ....................................... SUCCESS [  0.004 s]

    [INFO] dubbo-filter-validation ............................ SUCCESS [  0.899 s]

    [INFO] dubbo-filter-cache ................................. SUCCESS [  0.822 s]

    [INFO] dubbo-registry-default ............................. SUCCESS [  1.977 s]

    [INFO] dubbo-monitor-default .............................. SUCCESS [  1.567 s]

    [INFO] dubbo-registry-multicast ........................... SUCCESS [  1.674 s]

    [INFO] dubbo-config ....................................... SUCCESS [  0.004 s]

    [INFO] dubbo-config-api ................................... SUCCESS [  3.004 s]

    [INFO] dubbo-config-spring ................................ SUCCESS [  3.852 s]

    [INFO] dubbo-rpc-thrift ................................... SUCCESS [  3.846 s]

    [INFO] dubbo-rpc-memcached ................................ SUCCESS [  0.790 s]

    [INFO] dubbo-rpc-redis .................................... SUCCESS [  0.828 s]

    [INFO] dubbo-registry-zookeeper ........................... SUCCESS [  1.580 s]

    [INFO] dubbo-registry-redis ............................... SUCCESS [  1.641 s]

    [INFO] dubbo .............................................. SUCCESS [ 39.232 s]

    [INFO] dubbo-simple ....................................... SUCCESS [  0.005 s]

    [INFO] dubbo-registry-simple .............................. SUCCESS [  4.940 s]

    [INFO] dubbo-monitor-simple ............................... SUCCESS [  9.127 s]

    [INFO] dubbo-admin ........................................ SUCCESS [ 11.274 s]

    [INFO] dubbo-demo ......................................... SUCCESS [  0.004 s]

    [INFO] dubbo-demo-api ..................................... SUCCESS [  0.660 s]

    [INFO] dubbo-demo-provider ................................ SUCCESS [  3.590 s]

    [INFO] dubbo-demo-consumer ................................ SUCCESS [  3.541 s]

    [INFO] dubbo-test ......................................... SUCCESS [  0.004 s]

    [INFO] dubbo-test-benchmark ............................... SUCCESS [  4.688 s]

    [INFO] dubbo-test-compatibility ........................... SUCCESS [  0.041 s]

    [INFO] dubbo-test-integration ............................. SUCCESS [  0.044 s]

    [INFO] dubbo-test-examples ................................ SUCCESS [  3.082 s]

    [INFO] ------------------------------------------------------------------------

    [INFO] BUILD SUCCESS

    [INFO] ------------------------------------------------------------------------

    [INFO] Total time: 02:39 min

    [INFO] Finished at: 2017-11-19T14:33:11+08:00

    [INFO] Final Memory: 41M/163M

    [INFO] ------------------------------------------------------------------------

  • 相关阅读:
    [AGC030F] Permutation and Minimum
    nginx
    Flex建立AS项目时,如何设定发布的舞台大小
    让Flex 支持VSS
    Flex编程实用技巧
    Flash/Flex学习笔记(57):实用技巧
    sql 2000 "无法执行查询,因为一些文件缺少或未注册"的解决办法
    Flash/Flex学习笔记(56):矩阵变换
    什么是反向代理,如何利用反向代理提高网站性能
    AS3及Flex的百条常用知识
  • 原文地址:https://www.cnblogs.com/sharpest/p/8022670.html
Copyright © 2011-2022 走看看