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


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

    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

    UserRestService.java

    pom.xml

     View Code

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

    UserServiceImpl.java

    UserRestServiceImpl.java

    DemoProvider.java

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

     View Code

    pom.xml

     View Code

    测试时,运行DemoProvider中的main方法即可启动服务,所有服务注册在ZooKeeper,层次结构类似下面这样:

    复制代码
    /dubbo
      /dubbo/yjmyzz.dubbo.demo.api.UserRestService
        /dubbo/yjmyzz.dubbo.demo.api.UserRestService/providers
        /dubbo/yjmyzz.dubbo.demo.api.UserRestService/configurators
      /dubbo/yjmyzz.dubbo.demo.api.UserService
        /dubbo/yjmyzz.dubbo.demo.api.UserService/providers
        /dubbo/yjmyzz.dubbo.demo.api.UserService/configurators
    复制代码

    三、服务消费方

     

    DemoConsumer.java

    配置文件:resourcesMETA-INFspringdubbo-hello-consumer.xml

     View Code

    pom.xml

     View Code

    其它注意事项:

    dubbo构架中,zk充着“服务注册中心”的角色,所以生产者与消费者的xml配置文件中,都要配置zk地址,如果zk采用集群部署时,配置写法参考下面这样:

    <dubbo:registry address="zookeeper://172.28.*.102:2181?backup=172.28.*.102:2182,172.28.*.102:2183"/>

    dubbo还有一个管理界面,用于服务治理,包括启用/禁用服务,设置服务的路由规则(即:A地址的Consumer直接调用B机器的Provider,而不是由负载均衡算法分配)等等。

    使用方法:将dubbo-admin这个项目编译成war包后,部署到jetty或其它兼容web server即可(当然要修改WEB-INFdubbo.properties里zk的地址)

    部署完成后,访问管理界面时,默认用户名,密码均是root。 

    另外dubbo-monitor项目用于性能监控,结合监控产生的数据,再套上一些图表展示的框架,可以用图表方式直观展示各种指标。

    注:官网给出的dubbo-admin采用的webx架构有点老,而且除了淘宝之外,几乎没人在用,dubbo-monitor-simple界面也比较古朴,所以社区也人对其做了扩展,详情参考另一篇博客dubbox 的各种管理和监管

    2016-02-25:dubbox依赖的spring虽然升级成3.x了,但版本还是有点低,spring都已经4.x了,为了方便我fork了一份,升级成spring 4.x 同时增加了log4j2的日志组件支持,详情见:dubbox升级spring到4.x及添加log4j2支持

    参考文章:

    http://shiyanjun.cn/archives/341.html

    http://blog.csdn.net/wilsonke/article/details/39896595

    http://www.dataguru.cn/thread-464197-1-1.html

    http://www.iteye.com/magazines/103

    http://dangdangdotcom.github.io/dubbox/rest.html

    http://dangdangdotcom.github.io/dubbox/demo.html

    http://blog.csdn.net/hzzhoushaoyu/article/details/43273099

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com 
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [Java IO]04_系统标准IO
    [Java IO]03_字符流
    [Java IO]02_字节流
    [Java IO]01_File类和RandomAccessFile类
    [Java 安全]加密算法
    [Java 安全]消息摘要与数字签名
    Java正则速成秘籍(三)之见招拆招篇
    Java正则速成秘籍(一)之招式篇
    Java 枚举
    redis 系列13 集合对象
  • 原文地址:https://www.cnblogs.com/handsome1013/p/7453617.html
Copyright © 2020-2023  润新知