【Dubbo】整合Dubbo+Zookeeper+SpringMVC(三)---构建服务提供者和消费者

第一步:provider和customer中添加pom.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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>Provider</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Provider Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <!-- spring需要的jar包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>3.2.4.RELEASE</version>
        <type>jar</type>
    </dependency>  

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.2.4.RELEASE</version>
        <type>jar</type>
    </dependency>  

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>3.2.4.RELEASE</version>
        <type>jar</type>
    </dependency>  

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.2.4.RELEASE</version>
        <type>jar</type>
    </dependency>  

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>3.2.4.RELEASE</version>
        <type>jar</type>
    </dependency>  

    <!-- hibernate需要的jar包 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.1.3.Final</version>
    </dependency>  

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.2.16.Final</version>
        <type>jar</type>
    </dependency>  

    <!-- hibernate ehcache需要的jar包 -->
    <!-- <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>4.3.8.Final</version>
    </dependency>  --> 

    <!-- 连接MySQL数据库需要的jar包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.34</version>
    </dependency>  

    <!-- dbcp连接池需要的jar包 -->
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>  

    <!-- jstl需要的jar包 -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>  

    <!-- log4j需要的jar包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>  

    <!-- 文件上传需要的jar包 -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.1</version>
    </dependency>  

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.4</version>
    </dependency>   

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <type>jar</type>
    </dependency>  

    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>  

    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.7.0</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>Provider</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
  </build>
</project>

第二步:准备provider

1.修改pom.xml

2.修改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"
    version="3.0">
    <display-name></display-name>    

  <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>

    <servlet>
        <servlet-name>provider</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:applicationContext.xml,classpath:applicationContext-servlet.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>provider</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <!-- 字符过滤器 -->
    <filter>
        <filter-name>Set Character Encoding</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>
    </filter>
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

3.Provider中添加服务接口

package com.zlg.test.provider;

import java.util.List;

/**
 * @Title: DemoService.java
 * @Package: com.zlg.test.provider
 * @Description: TODO
 * @author: zlg
 * @date: 2017年6月17日 下午8:17:06
 * @version: V1.0
 */
public interface DemoService {

    String sayHello(String name);  

    public List getUsers(); 

}

4.Provider中添加服务接口实现类

package com.zlg.test.provider;

import java.util.ArrayList;
import java.util.List;

import com.zlg.test.po.User;

/**
 * @Title: DemoServiceImpl.java
 * @Package: com.zlg.test.provider
 * @Description: TODO
 * @author: zlg
 * @date: 2017年6月17日 下午8:21:26
 * @version: V1.0
 */
public class DemoServiceImpl implements DemoService {

    @Override
    public String sayHello(String name) {
        return "Hello, " + name + ". Welcome!";
    }

    @Override
    @SuppressWarnings("rawtypes")
    public List getUsers() {

        List<User> users = new ArrayList<User>(3);

        User user1 = new User(1, "张三");
        User user2 = new User(1, "李四");
        User user3 = new User(1, "麻子");

        users.add(user1);
        users.add(user2);
        users.add(user3);

        return null;
    }

}

5.添加applicationContext.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
        ">  

    <!-- 具体的实现bean -->
    <bean id="demoService" class="com.zlg.test.provider.DemoServiceImpl" />  

    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="xs_provider" />  

    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <!--<dubbo:registry address="multicast://224.5.6.7:1234" /> -->  

    <!-- 使用zookeeper注册中心暴露服务地址 --即zookeeper的所在服务器ip地址和端口号 -->
    <dubbo:registry address="zookeeper://192.168.0.100:2181" />  

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />  

    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.zlg.test.provider.DemoService"
        ref="demoService" />  

</beans> 

6.添加测试类

package com.zlg.test.provider;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Title: TestProvider.java
 * @Package: com.zlg.test.provider
 * @Description: TODO
 * @author: zlg
 * @date: 2017年6月17日 下午8:33:58
 * @version: V1.0
 */
public class TestProvider {

    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" });
        context.start();
        System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
    }
}

ctrl+f11运行测试类

此时会报错:

错误1:通配符的匹配很全面, 但无法找到元素 ‘dubbo:application‘ 的声明。

错误2:Caused by: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 46; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘dubbo:application‘ 的声明

解决方法:

a.Eclipse中补充dubbo.xsd

b.pom添加依赖

<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
            <!-- <exclusion>
                <artifactId>netty</artifactId>
                <groupId>org.jboss.netty</groupId>
            </exclusion> -->
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>

第三步:准备customer

1.修改pom.xml

2.添加applicationContext.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="Customer" />  

    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    <dubbo:registry address="zookeeper://192.168.0.100:2181" />  

    <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->
    <dubbo:reference id="demoService"
        interface="com.zlg.test.provider.DemoService" />  

</beans> 

3.添加测试类:

package com.test.zlg.customer;

import java.util.List;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zlg.test.po.User;
import com.zlg.test.provider.DemoService;

/**
 * @Title: TestCustomer.java
 * @Package: com.test.zlg.customer
 * @Description: TODO
 * @author: zlg
 * @date: 2017年6月17日 下午9:23:51
 * @version: V1.0
 */
public class TestCustomer {

    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" });
        context.start();  

        DemoService demoService = (DemoService) context.getBean("demoService");
        String hello = demoService.sayHello("zlg");
        System.out.println(hello);  

        List<User> list = (List<User>)demoService.getUsers();
        if (list != null && list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
                System.out.println("name:" + list.get(i).getName());
            }
        }
        System.in.read();
    } 

}

第四步:联合测试(前提:将dubbo和zookeeper启动起来)

a.将provider工程加入到Tomcat容器中

b.启动tomcat,运行该项目

c.ctrl+f11运行customer工程中的TestCustomer.java文件,查看效果

补充:

a.po:user类,需要

implements Serializable
package com.zlg.test.po;

import java.io.Serializable;

/**
 * @Title: User.java
 * @Package: com.zlg.test.po
 * @Description: TODO
 * @author: zlg
 * @date: 2017年6月17日 下午8:24:03
 * @version: V1.0
 */
public class User implements Serializable{

    /**
     * Fields User.java
     */
    private static final long serialVersionUID = -2680605921068309009L;

    private int id;

    private String name;

    public User(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

b.customer工程需要包含DemoService类和User类

方式1:将Provider工程中的User.java和DemoService.java 打成jar包,放入到Customer工程中。

方式2:简历Maven module,抽离出common工程,将公共的Service接口和pojo放入到common工程中公用。

项目中推荐使用方式2

c.工程结构

provider:

customer:

代码在gitHub上,如果需要可以留言给地址down代码。

时间: 2024-10-25 17:52:12

【Dubbo】整合Dubbo+Zookeeper+SpringMVC(三)---构建服务提供者和消费者的相关文章

分布式服务框架之Dubbo整合Spring项目(三)

spring-mvc.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.springframewor

构建springmvc+mybatis+dubbo分布式平台-zookeeper注册中心安装

上一篇我们介绍<构建dubbo分布式平台-dubbo简介>,结合dubbo基础简介,今天我们来学习基于zookeeper注册中心的安装. 注册中心 1.建议使用dubbo-2.3.3以上版本的使用zookeeper注册中心客户端 2.Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心. 3.Dubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即可, 所有注册中心逻辑适配都在调用Zookeeper客户端时完成

dubbo &amp; zookeeper &amp; springMVC

一.安装准备 1.环境简介 名称 版本 OS Mac OS X 10.11.5 JDK 1.8.0_51 dubbo 2.5.4 tomcat 8.0.35 Zookeeper 3.4.8 maven 3.3.9 2.小插曲 想用wget进行下载,发现mac默认是没有安装的.用惯了别的Linux环境,相使用个自动安装工具来安装wget.让后就找到了Homebrew.下面首先安装Homebrew,这个类似CentOS的yum和Ubuntu的apt-get,安装方法很简单,执行下面就可以了: rub

Springboot 整合 Dubbo/ZooKeeper

本文提纲 一.为啥整合 Dubbo 实现 SOA 二.运行 springboot-dubbo-server 和 springboot-dubbo-client 工程 三.springboot-dubbo-server 和 springboot-dubbo-client 工程配置详解 一.为啥整合 Dubbo 实现 SOA Dubbo 不单单只是高性能的 RPC 调用框架,更是 SOA 服务治理的一种方案. 核心: 1. 远程通信,向本地调用一样调用远程方法. 2. 集群容错 3. 服务自动发现和

springboot与dubbo整合入门(三种方式)

Springboot与Dubbo整合三种方式详解 整合环境: jdk:8.0 dubbo:2.6.2 springboot:2.1.5 项目结构: 1.搭建项目环境: (1)创建父项目与三个子项目,创建项目时,都使用spring initializr,创建时,父项目中注意的一点: (2)创建三个子项目,在已有的父项目上右键,新建模块: (3)创建完成后:将三个子项目在父项目pom.xml中配置: (4)修改所有子项目中的parent标签:(删掉之前parent中的springboot)修改为:

Springboot整合Dubbo和Zookeeper

Dubbo是一款由阿里巴巴开发的远程服务调用框架(RPC),其可以透明化的调用远程服务,就像调用本地服务一样简单.截至目前,Dubbo发布了基于Spring Boot构建的版本,版本号为0.2.0,这使得其与Spring Boot项目整合变得更为简单方便.而Zookeeper在这里充当的是服务注册中心的角色,我们将各个微服务提供的服务通过Dubbo注册到Zookeeper中,然后服务消费者通过Dubbo从Zookeeper中获取相应服务并消费.本文案例的架构图可以简单用下图表示: 本文案例最终项

Spring Boot 整合 Dubbo和Zookeeper

Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建主maven项目 创建子spring boot项目 环境介绍 zookeeper 安装 dubbo-admin 查看管理注册中心服务提供者和消费者 Zookeeper 安装 http://zookeeper.apache.org/releases.html 下载最新安装包,文件格式是tar.gz,可

SpringBoot与Dubbo整合的三种方式

1. 使用默认application.properties和注解的方式 导入dubbo-starter,在application.properties配置属性,使用@Service注解来暴露服务,使用@Reference来引用服务.具体可参考 Dubbo整合SpringBoot,这里截取部分代码方便理解. 属性在application.properties中配置 服务提供方使用@Service注解暴露服务 部分配置如“timeout”等可以在注解上添加 服务消费方使用@Reference注解来引

dubbo入门学习(三)-----dubbo整合springboot

springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo 一.创建boot-user-service-provider 本篇博文基于上篇中的dubbo项目,整体工程如下: 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"