牛骨文教育服务平台(让学习变的简单)
博文笔记

分布式服务框架 dubbo/dubbox 入门示例

创建时间:2015-09-17 投稿人: 浏览次数:22281

http://www.cnblogs.com/yjmyzz/p/dubbox-demo.html

dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架。

官网首页:http://dubbo.io/ ,官方用户指南 http://dubbo.io/User+Guide-zh.htm上面的几张图画得不错,完全可以当做SOA架构的学习资料

淘宝将这个项目开源出来以后,得到了不少同行的支持,包括:

当当网的扩展版本dubbox :https://github.com/dangdangdotcom/dubbox

京东的扩展版本jd-hydra: http://www.oschina.net/p/jd-hydra

不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://www.oschina.net/news/55059/druid-1-0-9 中的评论),反到是当当网的扩展版本仍在持续发展,墙内开花墙外香。

不管如何,能在阿里、当当、京东这些大型网站正式使用的框架,总不至于差到哪里去。

本文下面的示例均基于当当的dubbox版本,由于dubbox并没向maven提交编译后的jar包,所以只能从github clone代码到本地编译得到jar包。

 

编译及测试步骤:(以下步骤全在windows环境中完成)

1. 本机先安装github on Windows的客户端,将在path路径中,把git.exe加进去

2. 命令行下 git clone https://github.com/dangdangdotcom/dubbox 把代码拉到本地

3. mvn install -Dmaven.test.skip=true 跳过测试编译

4. 在本机安装一个zookeeper,参考zoo.cfg如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/java/zookeeper-3.4.6/data
dataLogDir=D:/java/zookeeper-3.4.6/log
clientPort=2181
server.1=localhost:2287:3387

然后输入 bin/zkServer.cmd 启用zookeeper

5. intellij Idea中导入源码

6. 运行 dubboxdubbo-demodubbo-demo-providersrc estjavacomalibabadubbodemoproviderDemoProvider.java 

把服务提供方跑起来,成功后,可以在ZK里,用 ls / 看下,会发现zk里多出了一个dubbo的节点,所有服务全注册在这里了

7. 运行dubboxdubbo-demodubbo-demo-consumersrc estjavacomalibabadubbodemoconsumerDemoConsumer.java

服务销售方调用测试,可以看console里的输出

8. 运行dubboxdubbo-demodubbo-demo-consumersrc estjavacomalibabadubbodemoconsumerRestClient.java

跑一下rest调用

9. 浏览器访问 http://localhost:8888/services/users/100.xml 或 http://localhost:8888/services/users/100.json

 

dubbox官方的示例,虽然已经很简单了,但是对于初次接触的人来讲,仍然略显复杂,下面的代码在其基础上简化了一下:

一、先定义服务接口及传输对象DTO

项目结构如下

代码:

User.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 package yjmyzz.dubbo.demo.api; import org.codehaus.jackson.annotate.JsonProperty; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable;   @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class User implements Serializable {       @NotNull     @Min(1L)     private Long id;       @JsonProperty("username")     @XmlElement(name = "username")     @NotNull     @Size(min = 6, max = 50)     private String name;       public User() {     }       public User(Long id, String name) {         this.id = id;         this.name = name;     }       public Long getId() {         return id;     }       public void setId(Long id) {         this.id = id;     }       public String getName() {         return name;     }       public void setName(String name) {         this.name = name;     }       @Override     public String toString() {         return "User (" +                 "id=" + id +                 ", name="" + name + """ +                 ")";     } }

UserService.java

+ View Code

UserRestService.java

+ View Code

pom.xml

 View Code

 

二、定义服务生产者(即:服务接口的实现方)

UserServiceImpl.java

+ View Code

UserRestServiceImpl.java

+ View Code

DemoProvider.java

+ View Code

配置文件:resourcesMETA-INFspringdubbo-demo-provider.xml

 View Code

pom.xml

 View Code

测试时,运行DemoProvider中的main方法即可启动服务,所有服务注册在ZooKeeper,

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。