--- 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/)