篇首语:本文由编程笔记#自由互联小编为大家整理,主要介绍了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