篇首语:本文由编程笔记#自由互联小编为大家整理,主要介绍了dubbo+zookeeper+springmvc搭建实例教程相关的知识,希望对你有一定的参考价值。
本篇是实例教程分享搭建dubbozookeeper一些必经的坑 更多请查看Dubbo官方文档 本篇最终项目dubbo.demo下载
这里引用官方文档的一张图片来简单说明各个节点的角色职责  
节点角色说明
- Provider: 暴露服务的服务提供方。
- Consumer: 调用远程服务的服务消费方。
- Registry: 服务注册与发现的注册中心。
- Monitor: 统计服务的调用次调和调用时间的监控中心。
- Container: 服务运行容器。
一、本篇概述
本篇分两个部分。 第一搭建好provider和consumer后使用Main方法阻塞来模拟不涉及到SpringMVC。 第二搭建后使用SpringMVC进行注入调用远程服务接口。
二、准备工作
框架版本
- tomcat8jdk7
- dubbo-admin-2.4.1.war 这是dubbo管理war包修改war直接扔到tomcat跑就可以了。
- zookeeper-3.4.5 本实例使用zookeeper作为注册中心其实还能使用其他的这里不详细讲解。
2.1 搭建zookeeper我这里是window环境
请参考window7环境下ZooKeeper的安装及运行 单机搭建很简单。
2.2 部署dubbo-admin-2.4.1.war
直接放到tomcat的webapp文件夹下运行tomcat。
- 配置信息都在WEB-INF/dubbo.properties下管理员账号密码都是rootzookeeper的地址等。
打开浏览器输入http://localhost:8080/dubbo-admin-2.4.1  运行前记得先打开zookeeper服务  输入账号密码root进入这个页面就算成功了。  
三、创建提供者provider工程使用maven构建
dubbo.provider项目结构如下图  
导入依赖pom.xml如下
4.0.0 com.soecode dubbo.provider war 0.0.1-SNAPSHOT dubbo.provider Maven Webapp http://maven.apache.org log4j log4j 1.2.14 com.alibaba dubbo 2.4.10 org.apache.zookeeper zookeeper 3.3.4 com.101tec zkclient 0.3 dubbo.provider
在service包下创建接口HelloService.java
package com.soecode.dubbo.service;public interface HelloService /** * say hello * param name * return */ public String sayHello(String name);
在Service.impl下实现接口HelloServiceImpl.java
package com.soecode.dubbo.service.impl;import org.springframework.stereotype.Service;import com.soecode.dubbo.service.HelloService;Service("helloServiceImpl")public class HelloServiceImpl implements HelloService public String sayHello(String name) return "hello,"name"!";
接下来填写dubbo-provider.xml来暴露接口
到此服务接口已经定义好接下来要通过main方法读取配置文件来达到zookeeper服务注册的效果。 创建ProviderApp.java package com.soecode.dubbo;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * 服务提供者示例 * author antgan * date 2017/1/12 * */public class ProviderApp     public static void main(String[] args) throws Exception         //读取配置文件        new ClassPathXmlApplicationContext(new String[]"dubbo-provider.xml");        System.out.println("provider服务已注册");        //使线程阻塞        System.in.read();      运行ProviderApp即可。 如何校验是否成功注册进入dubbo-admin点菜单栏上的提供者如下图就注册成功了成功暴露接口。   dubbo.consumer项目结构   引入依赖pom.xml如下     4.0.0    com.soecode    dubbo.consumer    war    0.0.1-SNAPSHOT    dubbo.consumer Maven Webapp    http://maven.apache.org                                log4j            log4j            1.2.14                                    com.alibaba            dubbo            2.4.10                                    org.apache.zookeeper            zookeeper            3.3.4                                    com.101tec            zkclient            0.3                                    com.soecode            dubbo.provider            0.0.1-SNAPSHOT                                            org.springframework            spring-web            4.1.7.RELEASE                            org.springframework            spring-webmvc            4.1.7.RELEASE                                    taglibs            standard            1.1.2                            jstl            jstl            1.2                            com.fasterxml.jackson.core            jackson-databind            2.5.4                        dubbo.consumer      配置dubbo-consumer.xml向zookeeper注册接口有点像存根 创建ConsumerApp.java运行测试 package com.soecode.dubbo;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.soecode.dubbo.service.HelloService;/** * 消费者示例 * author antgan * date 2017/1/12 * */public class ConsumerApp     public static void main(String[] args) throws Exception         //读取配置文件        ClassPathXmlApplicationContext context  new ClassPathXmlApplicationContext(new String[]"dubbo-consumer.xml");        //获取在zookeeper注册的服务接口        HelloService helloService  (HelloService)context.getBean("helloService");        //调用接口        System.out.println("HelloService  "  helloService.sayHello("ant"));        //不让控制台消失按任意键结束        System.in.read();      运行结果   我们也可以在dubbo-admin上看一下如下   至此已经完成了第一部分在main方法模拟调用远程接口。 在dubbo.consumer引入springMVCpom.xml 添加以下jar包                                     org.springframework            spring-web            4.1.7.RELEASE                            org.springframework            spring-webmvc            4.1.7.RELEASE                                    taglibs            standard            1.1.2                            jstl            jstl            1.2                            com.fasterxml.jackson.core            jackson-databind            2.5.4          在resource文件夹下创建spring-web.xml 修改web.xml使其运行时加载配置文件。  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >    dubbo.consumer                contextConfigLocation                    classpath:/dubbo-consumer.xml                        org.springframework.web.context.ContextLoaderListener                    dubbo.consumer-dispatcher        org.springframework.web.servlet.DispatcherServlet                            contextConfigLocation            classpath:spring-web.xml                0                dubbo.consumer-dispatcher        /      在dubbo.web包下创建HelloController.java package com.soecode.dubbo.web;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 com.soecode.dubbo.service.HelloService;ControllerRequestMapping("hello")public class HelloController     /**     * 注入远程接口     */    Autowired    private HelloService helloService;    /**     * 调用远程接口返回index.jsp页面     * param model     * return     */    RequestMapping("index")    public String index(Model model)        model.addAttribute("str", helloService.sayHello("ant"));        return "index";      运行地址栏输入http://localhost:8080/dubbo.consumer/hello/index   几个坑你可能会遇到 一、遇到这个报错 java.lang.NullPointerException    at org.springframework.core.SerializableTypeWrapper$TypeProxyInvocationHandler.invoke(SerializableTypeWrapper.java:239)  解决办法这是因为spring的jar包冲突dubbo自带一个2.x.x版本的spring。pom修改如下                             com.alibaba            dubbo            2.4.10                                              org.springframework                  spring                                      二、其他都做好了就是无法启动。  解决方法可以尝试provider打包成jarconsumer引入。 三、无法读取dubbo的配置文件  解决方法下载dubbo.xsd手动添加xsd。具体方法可以参考。解决:dubbo找不到dubbo.xsd报错 最后一起进步一起学习吧
 四、创建消费者consumer项目
 


 五、consumer引入SpringMVC
 
 
 
