---
title: Spring集成Dubbo
date: 2017-10-27 17:30:41
order: 03
categories:
- Java
- 框架
- Spring
- Spring集成
tags:
- Java
- 框架
- Spring
- 集成
- Dubbo
permalink: /pages/1bbc8647/
---
# Spring 集成 Dubbo
## ZooKeeper
ZooKeeper 可以作为 Dubbo 的注册中心。
Dubbo 未对 Zookeeper 服务器端做任何侵入修改,只需安装原生的 Zookeeper 服务器即可,所有注册中心逻辑适配都在调用 Zookeeper 客户端时完成。
**安装**
在 [ZooKeeper 发布中心](http://zookeeper.apache.org/releases.html) 选择需要的版本,下载后解压到本地。
**配置**
```
vi conf/zoo.cfg
```
如果不需要集群,`zoo.cfg` 的内容如下 [2](https://dubbo.gitbooks.io/dubbo-admin-book/content/install/zookeeper.html#fn_2):
```
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/dubbo/zookeeper-3.3.3/data
clientPort=2181
```
如果需要集群,`zoo.cfg` 的内容如下 [3](https://dubbo.gitbooks.io/dubbo-admin-book/content/install/zookeeper.html#fn_3):
```
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/dubbo/zookeeper-3.3.3/data
clientPort=2181
server.1=10.20.153.10:2555:3555
server.2=10.20.153.11:2555:3555
```
并在 data 目录 [4](https://dubbo.gitbooks.io/dubbo-admin-book/content/install/zookeeper.html#fn_4) 下放置 myid 文件:
```
mkdir data
vi myid
```
myid 指明自己的 id,对应上面 `zoo.cfg` 中 `server.` 后的数字,第一台的内容为 1,第二台的内容为 2,内容如下:
```
1
```
**启动**
Linux 下执行 `bin/zkServer.sh` ;Windows `bin/zkServer.cmd` 启动 ZooKeeper 。
**命令行**
```
telnet 127.0.0.1 2181
dump
```
或者:
```
echo dump | nc 127.0.0.1 2181
```
用法:
```
dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181
```
或者:
```
```
> 1. Zookeeper 是 Apache Hadoop 的子项目,强度相对较好,建议生产环境使用该注册中心
> 2. 其中 data 目录需改成你真实输出目录
> 3. 其中 data 目录和 server 地址需改成你真实部署机器的信息
> 4. 上面 `zoo.cfg` 中的 `dataDir`
> 5. [http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html](http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html)
## Dubbo
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。
如果不想使用 Spring 配置,可以通过 [API 的方式](https://dubbo.gitbooks.io/configuration/api.md) 进行调用。
## 服务提供者
完整安装步骤,请参见:[示例提供者安装](https://dubbo.gitbooks.io/dubbo-admin-book/install/provider-demo.html)
### 定义服务接口
DemoService.java [1](https://dubbo.gitbooks.io/dubbo-user-book/quick-start.html#fn_1):
```java
package com.alibaba.dubbo.demo;
public interface DemoService {
String sayHello(String name);
}
```
### 在服务提供方实现接口
DemoServiceImpl.java [2](https://dubbo.gitbooks.io/dubbo-user-book/quick-start.html#fn_2):
```java
package com.alibaba.dubbo.demo.provider;
import com.alibaba.dubbo.demo.DemoService;
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}
```
### 用 Spring 配置声明暴露服务
provider.xml:
```xml
```
如果注册中心使用 ZooKeeper,可以将 dubbo:registry 改为 zookeeper://127.0.0.1:2181
### 加载 Spring 配置
Provider.java:
```java
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/provider.xml"});
context.start();
System.in.read(); // 按任意键退出
}
}
```
## 服务消费者
完整安装步骤,请参见:[示例消费者安装](https://dubbo.gitbooks.io/dubbo-admin-book/install/consumer-demo.html)
### 通过 Spring 配置引用远程服务
consumer.xml:
```xml
```
如果注册中心使用 ZooKeeper,可以将 dubbo:registry 改为 zookeeper://127.0.0.1:2181
### 加载 Spring 配置,并调用远程服务
Consumer.java [3](https://dubbo.gitbooks.io/dubbo-user-book/quick-start.html#fn_3):
```
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.alibaba.dubbo.demo.DemoService;
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});
context.start();
DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
String hello = demoService.sayHello("world"); // 执行远程方法
System.out.println( hello ); // 显示调用结果
}
}
```
> 1. 该接口需单独打包,在服务提供方和消费方共享
> 2. 对服务消费方隐藏实现
> 3. 也可以使用 IoC 注入
## FAQ
建议使用 `dubbo-2.3.3` 以上版本的 zookeeper 注册中心客户端。
## 资料
**Dubbo**
[Github](https://github.com/alibaba/dubbo) | [用户手册](https://dubbo.gitbooks.io/dubbo-user-book/content/) | [开发手册](https://dubbo.gitbooks.io/dubbo-dev-book/content/) | [管理员手册](https://dubbo.gitbooks.io/dubbo-admin-book/content/)
**ZooKeeper**
[官网](http://zookeeper.apache.org/) | [官方文档](http://zookeeper.apache.org/doc/trunk/)