dubbo+zk+springMVC项目搭建

项目基于dubbo-2.6.0 + zk-3.4.10实现

关于dubbo-admin和zk就不说了   下面直接开始撸代码。

  • 下图是项目结构
  •   dubbo+zk+springMVC项目搭建
  • 新建maven project 父工程   下面是maven库 版本依赖
  • <?xml version="1.0" encoding="UTF-8"?>
    <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>com.lxk.demo</groupId>
        <artifactId>demo-parent</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
    
        <!-- 统一管理依赖版本 -->
        <properties>
            <spring.version>4.3.10.RELEASE</spring.version>
            <dubbo.version>2.6.0</dubbo.version>
            <zookeeper.version>3.4.10</zookeeper.version>
            <zkclient.version>0.3</zkclient.version>
            <log4j.version>1.2.14</log4j.version>
            <jstl.version>1.2</jstl.version>
            <standard.version>1.1.2</standard.version>
            <jackson-databind.version>2.5.4</jackson-databind.version>
        </properties>
    
        <modules>
            <module>demo-interface</module>
            <module>demo-service</module>
            <module>demo-web</module>
        </modules>
  • 新建 maven Module 子工程为服务提供者接口工程 -- 编写测试接口
  •  
  • dubbo+zk+springMVC项目搭建
  • 新建 maven Module 子工程为服务提供者接口实现工程  --  maven 依赖
  • <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <parent>
            <artifactId>demo-parent</artifactId>
            <groupId>com.lxk.demo</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>demo-service</artifactId>
        <dependencies>
            <!-- Logger日志 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
    
            <!-- dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
    
            <!-- zookeeper -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
            </dependency>
    
            <!-- zkclient 用于访问zookeeper -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
            <dependency>
                <groupId>com.lxk.demo</groupId>
                <artifactId>demo-interface</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <!-- 指定端口 -->
                        <port>9002</port>
                        <!-- 请求路径 -->
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
  • 编写服务提供接口 -- 实现类
  • dubbo+zk+springMVC项目搭建
  • <?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:component-scan base-package="com.lxk.demo.*" />
    
        <!-- 接入dubbo的应用程序名称 -->
        <dubbo:application name="demo-service" />
    
        <!-- 注册仓库地址:zookeeper组件,192.168.61.128:2181 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
    
        <!--
                声明需要暴露的服务接口,
                请注意ref属性中指定的HelloService接口实现类,它并没有在xml文件中定义,而是使用注解的方式在class中定义
         -->
        <dubbo:service interface="com.lxk.demo.service.IService" ref="helloService"/>
    </beans>
  • dubbo+zk+springMVC项目搭建
  • 运行 得到以下结果
  • dubbo+zk+springMVC项目搭建
  • 至此  服务提供者 已经完成  下面就是服务消费者的实现
  • 新建 maven Module 子工程为服务消费者工程  --  maven 依赖
  • dubbo+zk+springMVC项目搭建
  • <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <parent>
            <artifactId>demo-parent</artifactId>
            <groupId>com.lxk.demo</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>demo-web</artifactId>
        <packaging>war</packaging>
    
        <name>demo-web Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <dependencies>
    
            <!-- log4j日志 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
    
            <!-- dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- zookeeper -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
            </dependency>
    
            <!-- zkclient -->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>
    
            <!-- 引用dubbo.provider -->
            <dependency>
                <groupId>com.lxk.demo</groupId>
                <artifactId>demo-interface</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
            <!-- SpringMVC -->
            <!-- spring web依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <!--3: Servlet web 相关依赖 -->
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>${standard.version}</version>
            </dependency>
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>${jstl.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson-databind.version}</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    
        <build>
            <finalName>demo-web</finalName>
            <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
                <plugins>
                    <plugin>
                        <artifactId>maven-clean-plugin</artifactId>
                        <version>3.0.0</version>
                    </plugin>
                    <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>3.0.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.7.0</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.20.1</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>3.2.0</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-install-plugin</artifactId>
                        <version>2.5.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <version>2.8.2</version>
                    </plugin>
    
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat-maven-plugin</artifactId>
                        <version>2.2</version>
                        <configuration>
                            <!-- 指定端口 -->
                            <port>9102</port>
                            <!-- 请求路径 -->
                            <path>/</path>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </project>
  • applicationContext-web.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="demo-web" />
    
        <!-- 注册仓库地址:zookeeper组件,192.168.61.128:2181 -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    
        <!-- 引用的服务,那个interface一定是一个被引入到DUBBO仓库的接口定义 -->
        <dubbo:reference id="helloService" interface="com.lxk.demo.service.IService"/>
    </beans>
  • springmvc-web.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:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           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">
    
        <!-- 配置SpringMVC -->
        <!-- 1:开启SpringMVC注解模式 -->
        <!-- 简化配置:
        1)自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
        2) 提供一系列:数据绑定,数字和日期的format等功能,支持xml,json读写-->
        <mvc:annotation-driven/>
    
        <!--2: 静态资源配置
        1) 加入静态资源的处理,如js,gif,png
        2)允许使用"/"处理
        -->
        <mvc:default-servlet-handler/>
    
        <!-- 3: 配置jsp 显示ViewResolver -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/jsp/" />  <!-- 前缀 -->
            <property name="suffix" value=".jsp" />   <!-- 后缀 -->
        </bean>
    
        <!-- 4: 扫描web相关的bean -->
        <context:component-scan base-package="com.lxk.demo.web"/>
    
    </beans>
  • web.xml
  • <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
      <display-name>demo-web</display-name>
    
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
          classpath:/applicationContext-web.xml
        </param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
    
      <!-- 配置DispatcherServlet -->
      <servlet>
        <servlet-name>demo-web-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 加载spring-web.xml -->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:spring-web.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>demo-web-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    </web-app>
  • 
    package com.lxk.demo.web;
    
    import com.lxk.demo.service.IService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    /**
     * dubbo 服务消费
     *   测试
     */
    @Controller
    @RequestMapping("hello")
    public class HelloController {
    
        /**
         * 注入远程接口
         */
        @Autowired
        private IService helloService;
    
        /**
         * 调用远程接口,返回index.jsp页面
         * @param model
         * @return
         */
        @RequestMapping("index")
        public String index(Model model){
            model.addAttribute("hello",helloService.sayHello("MOTO"));
            return "list";
        }
    
    }
    
  • dubbo+zk+springMVC项目搭建
  • dubbo+zk+springMVC项目搭建
  • 至此  结束  有不足之处 请转到评论区,以便讨论,谢谢。。