本篇是实例教程,分享搭建dubbo+zookeeper一些必经的坑
更多请查看Dubbo官方文档
本篇最终项目dubbo.demo下载
这里引用官方文档的一张图片,来简单说明各个节点的角色职责
节点角色说明:
- Provider: 暴露服务的服务提供方。
- Consumer: 调用远程服务的服务消费方。
- Registry: 服务注册与发现的注册中心。
- Monitor: 统计服务的调用次调和调用时间的监控中心。
- Container: 服务运行容器。
一、本篇概述
本篇分两个部分。
第一,搭建好provider和consumer后,使用Main方法阻塞来模拟,不涉及到SpringMVC。
第二,搭建后,使用SpringMVC进行注入调用远程服务接口。
二、准备工作
框架版本:
- tomcat8,jdk7
- 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下,管理员账号密码都是root,zookeeper的地址等。
打开浏览器输入:http://localhost:8080/dubbo-admin-2.4.1
(运行前记得先打开zookeeper服务)
输入账号密码root,进入这个页面就算成功了。
三、创建提供者provider工程(使用maven构建)
dubbo.provider项目结构如下图:
导入依赖,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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.soecode</groupId>
<artifactId>dubbo.provider</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo.provider Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- Logger日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.4.10</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.4</version>
</dependency>
<!-- zkclient 用于访问zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.3</version>
</dependency>
</dependencies>
<build>
<finalName>dubbo.provider</finalName>
</build>
</project>
在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")