Dubbo与Zookeeper、SpringMVC整合和使用
windows环境介绍:
myeclipse 10
jdk1.6
tomcat 6.0.35
一、安装Zookeeper
1.通过链接下载对应的包 http://www.apache.org/dist/zookeeper/
2.Zookeeper下载后解压即可,见下图
3.进入到conf里面,会看到zoo_sample.cfg文件。将zoo_sample.cfg改成bak文件,并复制一个修改为zoo.cfg,修改相关配置内容,注意修改的日志文件夹需要自己手动创建
4.进入D:\zookeeper-3.4.6\bin,双击zkServer.cmd,见到如下界面,就表示zookeeper已启动成功
二、安装dubbo
1.本人使用的是dubbo-admin-2.5.3.war
2.拷贝一个新的tomcat,并将tomcat/webapps里面的ROOT文件夹删掉
3.将dubbo-admin-2.5.3.war重命名为ROOT.war,并拷贝到tomcat/webapps目录下
4.启动tomcat
出现上述问题表示你没有启动zookeeper
5.dubbo发布成功后,输入http://localhost:8889/dubbo-admin-2.5.3/,此时出现登录页面,输入root/root进行登录,登录成功后如图
三、创建服务提供服务(provider)
项目结构如下图
相应的类中的代码如下:
web.xml
contextConfigLocation classpath:applicationContext.xml,classpath:applicationContext-servlet.xml encoding UTF-8
DemoService.java
package com.provider;public interface DemoService {String sayHello(String name);
}
DemoServiceImpl.java
package com.provider;import org.springframework.stereotype.Service;@Service(value="demoService")
public class DemoServiceImpl implements DemoService{public String sayHello(String name) {return "Hello Dubbo,Hello " + name;}}
applicationContext.xml
dubbo-provider.xml
applicationContext-servlet.xml
四、创建调用服务(customer)
customer服务架构和provider一致,拷贝一个即可
相应的代码如下:
applicationContext.xml
dubbo-consumer.xml
applicationContext-servlet.xml 和provider中的代码一致,就不贴出来了,本项目中其实这个文件可以不用
CustomerAction.java测试类
package com.customer;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import com.provider.DemoService;@Controller
@RequestMapping(value="/customerTest")
public class CustomerAction {@Resource(name="demoService")private DemoService demoService;@RequestMapping(value="/test.do")public ModelAndView test(HttpServletRequest request,HttpServletResponse response){System.out.println("成功");String result = demoService.sayHello("world");System.out.println(result);return null;}}
五、共享服务
注意:需要将服务提供的接口打成jar包,放入customer中
六、测试
步骤:1、先启动zookeeper服务
2、启动dubbo服务
3、启动provider服务
4、启动customer服务
正常会出现如下界面
错误总结:
若按照上述测试步骤分别在不同的tomcat中启动服务,应该一切正常
若2、3、4这三步放在同一个tomcat中启动,会出现如下错误。
看下关键异常:No provider available for the service
此异常是由于服务没有可以使用的提供者,就是说在zookeeper注册中心(zookeeper-url)中没有可供消费者调用的url,消费者访问提供者就失败了。
具体原因分析:由于dobbo在启动的时候会去检查各服务之间的依赖关系,由于启动的时候消费者没有检查到提供者提供的服务(此时可能提供者还没启动),所以报错
在消费者配置文件中,需要将
由于dubbo在注册的时候是默认会检查服务的依赖关系的