zoukankan      html  css  js  c++  java
  • 5.Dubbo之Spring XML配置

    一、演示

    1.包结构

    2.dubbo-spring-xml

    maven父工程

    2.1pom.xml配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.niugang</groupId>
        <artifactId>dubbo-spring-xml</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
        <modules>
            <module>dubbo-spring-xml-provider</module>
            <module>dubbo-spring-xml-customer</module>
            <module>dubbo-spring-xml-api</module>
        </modules>
        <properties>
            <!-- Generic properties -->
            <java.version>1.7</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <!-- Web -->
            <jsp.version>2.2</jsp.version>
            <jstl.version>1.2</jstl.version>
            <servlet.version>3.1.0</servlet.version>
            <!-- Spring -->
            <spring-framework.version>4.3.10.RELEASE</spring-framework.version>
            <!-- Logging -->
            <logback.version>1.0.13</logback.version>
            <slf4j.version>1.7.5</slf4j.version>
        </properties>
        <dependencyManagement>
    
    
            <dependencies>
                <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-web-api</artifactId>
                    <version>7.0</version>
                    <scope>provided</scope>
                </dependency>
    
                <!-- Spring MVC -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                    <version>${spring-framework.version}</version>
                </dependency>
    
                <!-- 其他web依赖 -->
                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>jstl</artifactId>
                    <version>${jstl.version}</version>
                </dependency>
    
                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>javax.servlet-api</artifactId>
                    <version>${servlet.version}</version>
                    <scope>provided</scope>
                </dependency>
    
                <dependency>
                    <groupId>javax.servlet.jsp</groupId>
                    <artifactId>jsp-api</artifactId>
                    <version>${jsp.version}</version>
                    <scope>provided</scope>
                </dependency>
    
                <!-- Spring and Transactions -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-tx</artifactId>
                    <version>${spring-framework.version}</version>
                </dependency>
    
                <!-- 使用SLF4J和LogBack作为日志 -->
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                    <version>${slf4j.version}</version>
                </dependency>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.16</version>
                </dependency>
                <dependency>
                    <groupId>org.slf4j</groupId>
                    <artifactId>jcl-over-slf4j</artifactId>
                    <version>${slf4j.version}</version>
                </dependency>
                <dependency>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                    <version>${logback.version}</version>
                </dependency>
                <dependency>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                    <version>${logback.version}</version>
                </dependency>
                <dependency>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-access</artifactId>
                    <version>${logback.version}</version>
                </dependency>
    
                <!--对json和xml格式的支持 -->
                <!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> 
                    <artifactId>jackson-dataformat-xml</artifactId> <version>2.5.3</version> 
                    </dependency> -->
                <!--配置springmvc信息转化为json所需的json包 -->
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>2.8.6</version>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>2.8.6</version>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-annotations</artifactId>
                    <version>2.8.6</version>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-core</artifactId>
                    <version>2.8.6</version>
                </dependency>
    
                <!-- 非必需,可简化IO操作 -->
                <dependency>
                    <groupId>commons-io</groupId>
                    <artifactId>commons-io</artifactId>
                    <version>2.3</version>
                </dependency>
    
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-test</artifactId>
                    <version>${spring-framework.version}</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jdbc</artifactId>
                    <version>${spring-framework.version}</version>
                    <scope>test</scope>
                </dependency>
    
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjrt</artifactId>
                    <version>1.8.6</version>
                </dependency>
                <!--aspectj依赖 -->
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjtools</artifactId>
                    <version>1.8.9</version>
                </dependency>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>1.7.4</version>
                </dependency>
    
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.11</version>
                    <scope>test</scope>
                </dependency>
    
                <!--dubbo -->
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>dubbo</artifactId>
                    <version>2.5.8</version>
                </dependency>
                <!--redis -->
                <dependency>
                    <groupId>redis.clients</groupId>
                    <artifactId>jedis</artifactId>
                    <version>2.9.0</version>
                </dependency>
    
            </dependencies>
        </dependencyManagement>
    </project>

    3.dubbo-spring-xml-api

    对外暴露RPC接口模块

    3.1pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>org.niugang</groupId>
        <artifactId>dubbo-spring-xml</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>dubbo-spring-xml-api</artifactId>
    </project>

    3.2Bean配置

    package org.niugang.bean;
    /**
     * 
     * @ClassName:  DefaultBean   
     * @Description:默认Bean
     * @author: niugang
     * @date:   2018年8月22日 下午5:30:27   
     * @Copyright: 863263957@qq.com. All rights reserved. 
     *
     */
    public class DefaultBean {
        private String str;
        private String methodName;
        private long timestamp;
    
        public String getStr() {
            return str;
        }
    
        public void setStr(String str) {
            this.str = str;
        }
    
        public String getMethodName() {
            return methodName;
        }
    
        public void setMethodName(String methodName) {
            this.methodName = methodName;
        }
    
        public long getTimestamp() {
            return timestamp;
        }
    
        public void setTimestamp(long timestamp) {
            this.timestamp = timestamp;
        }
    
        @Override
        public String toString() {
            return "DefaultBean [str=" + str + ", methodName=" + methodName + ", timestamp=" + timestamp + "]";
        }
        
    
    }

    3.3Service

    package org.niugang.service;
    
    /**
     * 
     * @ClassName:  DefaultApiService   
     * @Description:对外暴露API接口  
     * @author: niugang
     * @date:   2018年8月22日 下午5:27:21   
     * @Copyright: 863263957@qq.com. All rights reserved. 
     *
     */
    public interface DefaultApiService {
         
        /**
         * 默认方法
         * @param str
         * @return
         */
        String defaultMethod(String str);
    
    }

    4.dubbo-spring-xml-provider

    服务提供者

    将dubbo-spring-xml-api 打成jar包dubbo-spring-xml-provider中。

    4.1pom.xml

    <?xml version="1.0"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.niugang</groupId>
            <artifactId>dubbo-spring-xml</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>dubbo-spring-xml-provider</artifactId>
        <packaging>jar</packaging>
        <name>dubbo-spring-xml-provider</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <!-- Spring MVC -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
    
            <!-- 其他web依赖 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <!-- Spring and Transactions -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
            </dependency>
    
            <!-- 使用SLF4J和LogBack作为日志 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-access</artifactId>
            </dependency>
    
            <!--对json和xml格式的支持 -->
            <!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> 
                <version>2.5.3</version> </dependency> -->
            <!--配置springmvc信息转化为json所需的json包 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </dependency>
    
            <!-- 非必需,可简化IO操作 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
            </dependency>
            <!--aspectj依赖 -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjtools</artifactId>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
    
            <!--dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <!--redis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.niugang</groupId>
                <artifactId>dubbo-spring-xml-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.3</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    4.2service对外暴露接口实现类

    package org.niugang.service;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    import org.niugang.bean.DefaultBean;
    
    /**
     * 
     * @ClassName: DefaultDemoService
     * @Description:对外暴露接口实现类
     * @author: niugang
     * @date: 2018年8月21日 下午8:18:29
     * @Copyright: 863263957@qq.com. All rights reserved.
     *
     */
    
    public class DefaultServiceImpl implements DefaultApiService {
           //模拟数据
        public static List<DefaultBean> list = new ArrayList<DefaultBean>();
        static {
    
            DefaultBean defaultBean = new DefaultBean();
            defaultBean.setStr("1");
            defaultBean.setMethodName("defaultMethod");
            defaultBean.setTimestamp(System.currentTimeMillis());
            list.add(defaultBean);
            DefaultBean defaultBean2 = new DefaultBean();
            defaultBean2.setStr("2");
            defaultBean2.setMethodName("defaultMethod2");
            defaultBean2.setTimestamp(System.currentTimeMillis());
            list.add(defaultBean2);
            DefaultBean defaultBean3 = new DefaultBean();
            defaultBean3.setStr("3");
            defaultBean3.setMethodName("defaultMethod3");
            defaultBean3.setTimestamp(System.currentTimeMillis());
            list.add(defaultBean);
            DefaultBean defaultBean4 = new DefaultBean();
            defaultBean4.setStr("4");
            defaultBean4.setMethodName("defaultMethod4");
            defaultBean4.setTimestamp(System.currentTimeMillis());
            list.add(defaultBean4);
            DefaultBean defaultBean5 = new DefaultBean();
            defaultBean5.setStr("5");
            defaultBean5.setMethodName("defaultMethod5");
            defaultBean5.setTimestamp(System.currentTimeMillis());
            list.add(defaultBean5);
        }
         @Override
         public String defaultMethod(String str) {
            Random random = new Random();
            int nextInt = random.nextInt(6);
            String res = null;
            if (nextInt > 0) {
                DefaultBean defaultBean = list.get(nextInt - 1);
                res = defaultBean.getStr() + "#" + defaultBean.getMethodName() + "#" + defaultBean.getTimestamp()
                        + "###^^^^^^^^^^^" + str + "^^^^^^^^^^^^";
            } else {
                DefaultBean defaultBean = list.get(nextInt);
                res = defaultBean.getStr() + "#" + defaultBean.getMethodName() + "#" + defaultBean.getTimestamp()
                        + "###^^^^^^^^^^^" + str + "^^^^^^^^^^^^";
            }
            return res;
        }
    
    }

    4.3application.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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc" 
        xmlns:dubbo="http://dubbo.apache.org/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://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <import resource="provider.xml" />
    
    
    
        <!--組件扫描 -->
        <context:component-scan base-package="org.niugang" />
    
    
        <!--注解扫描 -->
        <mvc:annotation-driven />
    
    
    
    </beans>

    4.4provider.xml配置

    dubbo配置

    <?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: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://code.alibabatech.com/schema/dubbo
         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!-- http://dubbo.apache.org/schema/dubbo/dubbo.xsd 上面配置为这个一直报错,改为 http://code.alibabatech.com/schema/dubbo/dubbo.xsd -->
    
        <!--用于配置当前应用信息,不管该应用是提供者还是消费者 -->
        <dubbo:application name="hello-world-app" />
    
        <!-- 用于配置连接注册中心相关信息 -->
        <dubbo:registry address="redis://localhost:6379"
            timeout="30000">
            <!--配置redis连接参数 -->
            <!--具体参数配置见com.alibaba.dubbo.registry.redis.RedisRegistry.class  -->
            <dubbo:parameter key="max.idle" value="10" />
            <dubbo:parameter key="min.idle" value="5" />
            <dubbo:parameter key="max.active" value="20" />
            <dubbo:parameter key="max.total" value="100" />
        </dubbo:registry>
    
        <!-- 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 -->
        <dubbo:protocol name="dubbo" port="20880" accesslog="true" />
        
        <!-- 实现类 -->
        <bean id="defaultService" class="org.niugang.service.DefaultServiceImpl" />
        <!--用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 -->
        <dubbo:service interface="org.niugang.service.DefaultApiService"
            ref="defaultService" />
    
    
    
    </beans>

    redis注册源码见com.alibaba.dubbo.registry.redis.RedisRegistry.class

    4.5web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <!-- 上下文配置文件位置 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- spring 配置文件所在位置,启动 spring 时会去该路径下查找该配置文件 -->
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        <!-- spring 上下文监听器,初始化启动容器时启动 spring -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
        <!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 -->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <!-- spring 编码过滤器 -->
        <filter>
            <filter-name>characterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <!-- 编码过滤器过滤的路径 -->
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>

    5.dubbo-spring-xml-customer

    服务消费者

    需要引入dubbo-spring-xml-api.jar文件

    5.1pom.xml

    <?xml version="1.0"?>
    <project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.niugang</groupId>
            <artifactId>dubbo-spring-xml</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>dubbo-spring-xml-customer</artifactId>
        <packaging>jar</packaging>
        <name>dubbo-spring-xml-customer</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <!-- Spring MVC -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </dependency>
    
            <!-- 其他web依赖 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <!-- Spring and Transactions -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
            </dependency>
    
            <!-- 使用SLF4J和LogBack作为日志 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-access</artifactId>
            </dependency>
    
            <!--对json和xml格式的支持 -->
            <!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> 
                <version>2.5.3</version> </dependency> -->
            <!--配置springmvc信息转化为json所需的json包 -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </dependency>
    
            <!-- 非必需,可简化IO操作 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjrt</artifactId>
            </dependency>
            <!--aspectj依赖 -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjtools</artifactId>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
            </dependency>
            <!--dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <!--redis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </dependency>
            <!--引入服务提供者 rpc接口-->
            <dependency>
                <groupId>org.niugang</groupId>
                <artifactId>dubbo-spring-xml-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.3</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
    
    
            <finalName>dubbo-spring-xml-customer</finalName>
        </build>
    </project>

    5.1消费服务

    package org.niugang.controller;
    
    import javax.annotation.Resource;
    
    import org.niugang.service.DefaultApiService;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 
     * @ClassName: DemoConsumerController
     * @Description:web调用服务提供者对外暴露的rpc接口
     * @author: niugang
     * @date: 2018年8月18日 上午9:41:30
     * @Copyright: 863263957@qq.com. All rights reserved.
     *
     */
    @RestController
    public class DemoConsumerController {
    
        /**
         * 引入服务提供者
         */
        @Resource(name = "defaultService")
        private DefaultApiService defaultService;
    
        @RequestMapping("/sayHello")
        public String sayHello(@RequestParam String name) {
            return defaultService.defaultMethod(name);
        }
    
    }

    5.3applicationContentxt.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:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
            xmlns:dubbo="http://dubbo.apache.org/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://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <import resource="classpath:consumer.xml" />
    
        <!--組件扫描 -->
        <context:component-scan base-package="org.niugang" />
    
        <!--注解扫描 -->
        <mvc:annotation-driven />
    
    
    </beans>

    5.4customer.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: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://code.alibabatech.com/schema/dubbo
         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
         
        <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
        <dubbo:application name="hello-world-customer" />
    
        <dubbo:registry address="redis://localhost:6379"
            timeout="30000" check="false" />
    
        <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
        <dubbo:reference id="defaultService" interface="org.niugang.service.DefaultApiService" />
    
    </beans>

    5.5web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <!-- 上下文配置文件位置 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <!-- spring 配置文件所在位置,启动 spring 时会去该路径下查找该配置文件 -->
            <param-value>classpath*:applicationContext.xml</param-value>
        </context-param>
        <!-- spring 上下文监听器,初始化启动容器时启动 spring -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
        <!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 -->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath*:applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <!-- spring 编码过滤器 -->
        <filter>
            <filter-name>characterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <!-- 编码过滤器过滤的路径 -->
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>

    以上配置完成。将服务提供者,服务消费分别部署到不同的tomcat中。

    启动服务提供者,启动服务消费者。

    源码地址:

    https://gitee.com/niugangxy/dubbo

    微信公众号

                              
  • 相关阅读:
    Java基础—ArrayList源码浅析
    Java基础——类加载机制
    Java基础——常用类之日期时间类
    Java基础——反射
    栈队列例题3:使用两个栈实现一个队列
    栈队列例题2:SetOfStack放盘子
    栈队列例题1:设置带最小值的栈
    链表例题6:检查链表中的数据是否回文
    队列的实现
    栈的实现
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12187593.html
Copyright © 2011-2022 走看看