zoukankan      html  css  js  c++  java
  • 框架dubbox的简单使用

    之前:

      RPC: Remote Produedure Call :一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议

      SOA: Service-oriented architecture 面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。

      zooKeeper: 引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级 的服务,比如同步,配置管理,集群管理,名空间。

      Dubbo是一个来自阿里巴巴的开源分布式服务框架;

      DubboX是当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等;

    使用Dubbox搭建Demo:

      服务端:

      1、工程结构:

      

      2、ivy.xml配置:主要引入Dubbox和spring.日志等相关jar;

    <?xml version="1.0" encoding="UTF-8"?>
    <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
          <info
            organisation="com.dubbox.service"
            module="dubbox-services"
            status="integration">
        </info>
        
        <configurations>
            <conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
            <conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
            <conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
            <conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
            <conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
            <conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
            <conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
            <conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
            <conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
            <conf name="optional" visibility="public" description="contains all optional dependencies"/>
        </configurations>
        <dependencies>
            <!-- Spring 相关内容 -->
            <dependency org="org.springframework" name="spring-core" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-beans" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-web" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-webmvc" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-context" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-context-support" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-aop" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-expression" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-tx" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-jms" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-messaging" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-jdbc" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="aopalliance" name="aopalliance" rev="1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
               <dependency org="com.sun.xml.fastinfoset" name="FastInfoset" rev="1.2.13" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
               <dependency org="cglib" name="cglib-nodep" rev="3.1" conf="compile->compile(*),master(*);runtime->runtime(*)" />
               <dependency org="org.aspectj" name="aspectjrt" rev="1.8.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.aspectj" name="aspectjweaver" rev="1.8.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- Apache Commons -->
            <dependency org="commons-codec" name="commons-codec" rev="1.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="commons-pool" name="commons-pool" rev="1.6" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="commons-io" name="commons-io" rev="2.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="commons-net" name="commons-net" rev="3.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- JSR303 Validation -->
            <dependency org="javax.validation" name="validation-api" rev="1.1.0.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.hibernate" name="hibernate-validator" rev="5.1.3.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml" name="classmate" rev="1.1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- json序列化相关 -->
            <dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- Log 相关内容 -->
            <dependency org="org.slf4j" name="slf4j-api" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.slf4j" name="jul-to-slf4j" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.slf4j" name="log4j-over-slf4j" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="ch.qos.logback" name="logback-classic" rev="1.1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="ch.qos.logback" name="logback-core" rev="1.1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.logging" name="jboss-logging" rev="3.2.1.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- DobboX -->
            <dependency org="com.alibaba" name= "dubbo" rev="2.8.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="io.netty" name="netty" rev="3.10.5.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.google.guava" name="guava" rev="19.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
              <dependency org="com.101tec" name="zkclient" rev="0.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
              <dependency org="org.javassist" name="javassist" rev="3.20.0-GA" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>    
            <dependency org="org.jboss.resteasy" name="resteasy-jaxrs" rev="3.0.14.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.resteasy" name="resteasy-client" rev="3.0.14.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.resteasy" name="resteasy-jackson2-provider" rev="3.0.14.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.resteasy" name="jaxrs-api" rev="3.0.12.Final" />
            <dependency org="com.fasterxml.jackson.jaxrs" name="jackson-jaxrs-json-provider" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.jaxrs" name="jackson-jaxrs-base" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.module" name="jackson-module-jaxb-annotations" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="de.javakaffee" name="kryo-serializers" rev="0.41" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.esotericsoftware" name="kryo" rev="4.0.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.esotericsoftware" name="reflectasm" rev="1.11.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.ow2.asm" name="asm" rev="5.0.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.objenesis" name="objenesis" rev="2.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.esotericsoftware" name="minlog" rev="1.3.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- Http 客户端 -->
            <dependency org="org.apache.httpcomponents" name="httpclient" rev="4.4.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.apache.httpcomponents" name="httpcore" rev="4.4.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.apache.httpcomponents" name="httpmime" rev="4.4.1" transitive="false"/>
            <!-- ZooKeeper -->
            <dependency org="org.apache.zookeeper" name="zookeeper" rev="3.4.8" transitive="false"/>
            <!-- 其他: Web容器自带 -->
            <dependency org="javax.el" name="javax.el-api" rev="3.0.0" conf="provided->*" transitive="false"/>
            <dependency org="javax.servlet" name="javax.servlet-api" rev="3.1.0" conf="provided->*" transitive="false"/>
        </dependencies>
    </ivy-module>
    ivy.xml

      3、web.xml: 

    <?xml version="1.0" encoding="UTF-8"?>
    <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_3_0.xsd"
        id="core-services" version="3.0">
        <display-name>dubbox-services</display-name>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
        <!-- Spring -->
        <servlet>
            <servlet-name>mvc-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>WEB-INF/dubbox.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>mvc-dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        
    </web-app>
    web.xml

      4、dubbox.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd 
            http://code.alibabatech.com/schema/dubbo  
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <context:property-placeholder />
    
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
        <dubbo:application name="dubbox-services" />
    
        <!-- 使用zookeeper注册中心暴露服务地址 -->
        <dubbo:registry protocol="zookeeper" address="${zkHost:127.0.0.1:2181}" />
    
        <!-- 用dubbo协议暴露服务 -->
        <dubbo:protocol name="dubbo" port="${dubbo.port:20880}" />
    
        <!-- 调用的服务时的公共配置 -->
        <dubbo:consumer check="${dubbo.client.check:false}" retries="${dubbo.client.retries:0}"
            timeout="${dubbo.client.timeout:5000}" />
            
        <dubbo:service ref="demoService" interface="com.dubbox.service.DemoService"></dubbo:service>
    
        <import resource="classpath:com/dubbox/service/beans.xml"/>
    </beans>  

      5、beans.xml与服务接口与实现类:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:task="http://www.springframework.org/schema/task"
        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
        xsi:schemaLocation="http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <context:property-placeholder />
    
        <context:annotation-config />
    
        <context:component-scan base-package="com.dubbox.service" />
        
        <bean id="demoService" class="com.dubbox.service.DemoServiceImpl" />
        
    </beans>
    View Code
    package com.dubbox.service;
    
    public interface DemoService {
        
        public String greet(String name);
    
    }
    package com.dubbox.service;
    
    public class DemoServiceImpl implements DemoService{
    
        @Override
        public String greet(String name) {
            return "HI, "+name;
        }
    
    }

    以上是服务端所有代码,只写了一个方法,用于测试远程调用。其中最主要文件是dubbox.xml,在其中配置需要发布的接口;

      客户端:

      1、工程结构:

      

      需要说明的是d-s.jar是以上服务端打成的jar包,放到了lib下面直接引用;

      2、ivy.xml:几乎与服务端一样

    <?xml version="1.0" encoding="UTF-8"?>
    <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
          <info
            organisation="com.dubbox.client"
            module="dubbox-client"
            status="integration">
        </info>
        
        <configurations>
            <conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
            <conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
            <conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
            <conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
            <conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
            <conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
            <conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
            <conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
            <conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
            <conf name="optional" visibility="public" description="contains all optional dependencies"/>
        </configurations>
        
        <dependencies>
            <!-- Spring 相关内容 -->
            <dependency org="org.springframework" name="spring-core" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-beans" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-web" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-webmvc" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-context" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-context-support" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-aop" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-expression" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-tx" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-jms" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-messaging" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.springframework" name="spring-jdbc" rev="4.2.5.RELEASE" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="aopalliance" name="aopalliance" rev="1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
               <dependency org="com.sun.xml.fastinfoset" name="FastInfoset" rev="1.2.13" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
               <dependency org="cglib" name="cglib-nodep" rev="3.1" conf="compile->compile(*),master(*);runtime->runtime(*)" />
               <dependency org="org.aspectj" name="aspectjrt" rev="1.8.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.aspectj" name="aspectjweaver" rev="1.8.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- Apache Commons -->
            <dependency org="commons-codec" name="commons-codec" rev="1.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="commons-pool" name="commons-pool" rev="1.6" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="commons-io" name="commons-io" rev="2.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="commons-net" name="commons-net" rev="3.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- JSR303 Validation -->
            <dependency org="javax.validation" name="validation-api" rev="1.1.0.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.hibernate" name="hibernate-validator" rev="5.1.3.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml" name="classmate" rev="1.1.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- json序列化相关 -->
            <dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- Log 相关内容 -->
            <dependency org="org.slf4j" name="slf4j-api" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.slf4j" name="jul-to-slf4j" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.slf4j" name="log4j-over-slf4j" rev="1.7.10" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="ch.qos.logback" name="logback-classic" rev="1.1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="ch.qos.logback" name="logback-core" rev="1.1.2" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.logging" name="jboss-logging" rev="3.2.1.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- DobboX -->
            <dependency org="com.alibaba" name= "dubbo" rev="2.8.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="io.netty" name="netty" rev="3.10.5.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.google.guava" name="guava" rev="19.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
              <dependency org="com.101tec" name="zkclient" rev="0.7" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
              <dependency org="org.javassist" name="javassist" rev="3.20.0-GA" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>    
            <dependency org="org.jboss.resteasy" name="resteasy-jaxrs" rev="3.0.14.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.resteasy" name="resteasy-client" rev="3.0.14.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.resteasy" name="resteasy-jackson2-provider" rev="3.0.14.Final" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.jboss.resteasy" name="jaxrs-api" rev="3.0.12.Final" />
            <dependency org="com.fasterxml.jackson.jaxrs" name="jackson-jaxrs-json-provider" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.jaxrs" name="jackson-jaxrs-base" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.fasterxml.jackson.module" name="jackson-module-jaxb-annotations" rev="2.7.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="de.javakaffee" name="kryo-serializers" rev="0.41" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.esotericsoftware" name="kryo" rev="4.0.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.esotericsoftware" name="reflectasm" rev="1.11.3" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.ow2.asm" name="asm" rev="5.0.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.objenesis" name="objenesis" rev="2.4" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="com.esotericsoftware" name="minlog" rev="1.3.0" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <!-- Http 客户端 -->
            <dependency org="org.apache.httpcomponents" name="httpclient" rev="4.4.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.apache.httpcomponents" name="httpcore" rev="4.4.1" conf="compile->compile(*),master(*);runtime->runtime(*)" transitive="false"/>
            <dependency org="org.apache.httpcomponents" name="httpmime" rev="4.4.1" transitive="false"/>
            <!-- ZooKeeper -->
            <dependency org="org.apache.zookeeper" name="zookeeper" rev="3.4.8" transitive="false"/>
            <!-- 其他: Web容器自带 -->
            <dependency org="javax.el" name="javax.el-api" rev="3.0.0" conf="provided->*" transitive="false"/>
            <dependency org="javax.servlet" name="javax.servlet-api" rev="3.1.0" conf="provided->*" transitive="false"/>
        </dependencies>
    </ivy-module>
    ivy.xml

      3、web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <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_3_0.xsd"
        id="core-services" version="3.0">
        <display-name>d-c</display-name>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
        <!-- Spring -->
        <servlet>
            <servlet-name>mvc-dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>WEB-INF/beans.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>mvc-dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        
    </web-app>
    web.xml

      4、beans.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:task="http://www.springframework.org/schema/task"
        xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
        xsi:schemaLocation="http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <context:property-placeholder />
    
        <context:annotation-config />
        
        <context:component-scan base-package="com.dubbox.client" />
        
        <import resource="dubbox.xml" />
        
        <import resource="classpath:com/dubbox/service/beans.xml"/>
        
    </beans>

      5、dubbox.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd 
            http://code.alibabatech.com/schema/dubbo  
            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <context:property-placeholder />
    
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
        <dubbo:application name="dubbox-client" />
    
        <!-- 使用zookeeper注册中心暴露服务地址 -->
        <dubbo:registry protocol="zookeeper" address="${zkHost:127.0.0.1:2181}" />
    
        <!-- 调用的服务时的公共配置 -->
        <dubbo:consumer
            check="${dubbo.client.check:false}"
            retries="${dubbo.client.retries:0}"
            timeout="${dubbo.client.timeout:5000}" />
            
        <dubbo:reference id="demoService" interface="com.dubbox.service.DemoService" />
            
    
    </beans>  

      5、DemoClient.java:

    package com.dubbox.client;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.dubbox.service.DemoService;
    
    @RestController
    @RequestMapping(value="/api")
    public class DemoClient {
        
        @Autowired
        DemoService _demoService;
        
        @RequestMapping(value="/greet")
        public String greet(@RequestParam("name") String name){
            System.out.println(_demoService.greet(name));
            return _demoService.greet(name);
        }
    
    }

      以上是客户端的全部代码,引用了服务端的xml文件获取接口;

    测试Demo

      1、启动zookeeper:

        如开始所述,这是dubbox.xml所需的,用于注册服务;

        下载zookeeper: 官网地址:http://zookeeper.apache.org/,解压文件,可能需要简单配置,点击bin文件夹下的zkServer.cmd,启动zookeeper;等待启动服务端和客户端;

      2、启动服务端:

        部署启动,ZooKeeper会收到消息;

      3、启动客户端:

        输入地址:http://ip:port/dubbox-client/api/greet?name='test',输出成功;

      4、结束:

        只是一个Demo而已;

  • 相关阅读:
    【转】C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
    【转】第三方控件安装方法
    【jQuery插件】chackTextarea类似于新浪腾讯微博文本域字符数判断
    【转】关于wBox iFrame回调关闭问题的解决方案
    【转】jquery插件
    db4o助手 do4oHelper
    【转】C# 中文URL编码
    【转】C#集合之Hashtable
    【转】Web页面导出标准的Excel/Word/txt的代码实现
    jQuery图片居中裁切效果
  • 原文地址:https://www.cnblogs.com/liangblog/p/6165070.html
Copyright © 2011-2022 走看看