编译Dubbo源码并测试

2014.09.24 | Comments

转http://blog.javachen.com/2014/09/24/compile-and-test-dubbo.html

Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。

1. 安装

首先从 github 下载源代码并阅读 readme.md ,参考该文档,首先下载 opensesame,并编译:

$ git clone git@github.com:alibaba/opensesame.git $ cd opensesame $ mvn install 

然后,下载 dubbo 并编译:

$ git clone git@github.com:alibaba/dubbo.git $ cd dubbo $ mvn clean install -Dmaven.test.skip 

编译成功之后,生成 idea 相关配置文件:

$ mvn idea:idea 

接下来,将代码通过 maven 的方式导入到 idea ide 中。

2. 测试

安装之后,现在来搭一个测试环境。搭建一个测试环境,需要下面三个角色:

  • 消息提供者,示例工程见:dubbo-demo-provider
  • 消息注册中心,有四种类型:multicast、zookeeper、redis、dubbo
  • 消息消费者,示例工程见:dubbo-demo-consumer

作为测试,这里消息注册中心使用 Multicast 注册中心,以下操作是在 idea 中运行。

首先,修改 Dubbo/dubbo-demo/dubbo-demo-provider/src/test/resources/dubbo.properties 文件如下:

dubbo.container=log4j,spring dubbo.application.name=demo-provider dubbo.application.owner= dubbo.registry.address=multicast://224.5.6.7:1234?unicast=false #dubbo.registry.address=zookeeper://127.0.0.1:2181 #dubbo.registry.address=redis://127.0.0.1:6379 #dubbo.registry.address=dubbo://10.1.19.41:20880 #dubbo.monitor.protocol=registry dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.service.loadbalance=roundrobin #dubbo.log4j.file=logs/dubbo-demo-consumer.log #dubbo.log4j.level=WARN 

注意:

消息提供者和消息消费者建议在不同机器上运行,如果在同一机器上,需设置 unicast=false:即:multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有 multicast 注册中心有此问题。

然后,修改 Dubbo/dubbo-demo/dubbo-demo-consumer/src/test/resources/dubbo.properties 文件如下:

dubbo.container=log4j,spring dubbo.application.name=demo-consumer dubbo.application.owner= dubbo.registry.address=multicast://224.5.6.7:1234?unicast=false #dubbo.registry.address=zookeeper://127.0.0.1:2181 #dubbo.registry.address=redis://127.0.0.1:6379 #dubbo.registry.address=dubbo://10.1.19.41:20880 dubbo.monitor.protocol=registry #dubbo.log4j.file=logs/dubbo-demo-consumer.log #dubbo.log4j.level=WARN 

接下来,就可以运行 dubbo-demo-provider 和 dubbo-demo-consumer 了。

在 idea 中右键运行 Dubbo/dubbo-demo/dubbo-demo-provider/src/test/java/com/alibaba/dubbo/demo/provider/DemoProvider.java 类,以启动 dubbo-demo-provider 。

在 idea 中右键运行 Dubbo/dubbo-demo/dubbo-demo-consumer/src/test/java/com/alibaba/dubbo/demo/consumer/DemoConsumer.java 类,以启动 dubbo-demo-consumer 。

最后,观察终端输出的日志,dubbo-demo-provider 中输出如下内容:

[17:13:19] Hello world458, request from consumer: /10.1.19.41:57319, cookie:iamsorry [17:13:21] Hello world459, request from consumer: /10.1.19.41:57319, cookie:iamsorry [17:13:23] Hello world460, request from consumer: /10.1.19.41:57319, cookie:iamsorry [17:13:25] Hello world461, request from consumer: /10.1.19.41:57319, cookie:iamsorry 

而 dubbo-demo-consumer 中输出如下内容

[17:13:17] Hello world458, response form provider: 10.1.19.41:20880 cookie->iamsorry abc->17:13:19 Key 1->1 Key 2->2 codec->neg output->135 [17:13:20] Hello world459, response form provider: 10.1.19.41:20880 cookie->iamsorry abc->17:13:21 Key 1->1 Key 2->2 codec->neg output->135 

接下来,你可以试试使用其他的消息注册方式。

使用类似的方式,你也可以启动 dubbo-admin 和 dubbo-monitor-simple,需要注意的是,如果你是在一台机器上启动这两个服务,则需要修改 dubbo.properties 中的端口以避免端口冲突。

3. 其他

简单谈谈个人对 dubbo 项目的看法:

    1. 项目导入到 IDE 之后,使用的是 jdk 1.5 进行编译,需要手动一个一个地修改为 1.6。
    1. 项目没有使用统一的 code-template ,代码风格不统一。
    1. 文档不够规范,缺少一些能够快速上手的用户文档。
    1. dubbo 是获取第一个网卡的 ip 地址,当有多个网卡或者使用 VPN 时候会存在问题。
    1. dubbo 依赖的 Spring 和 Netty 版本都较低
    1. 有些类和注解中的属性过多,显得比较臃肿,当然,这是强迫性症了。

以上仅仅代表个人意见。

自己去看dubbo源码的更多相关文章

  1. dubbo面试题,会这些说明你真正看懂了dubbo源码

    整理了一些dubbo可能会被面试的面试题,感觉非常不错.如果你基本能回答说明你看懂了dubbo源码,对dubbo了解的足够全面.你可以尝试看能不能回答下.我们一起看下有哪些问题吧? 1.dubbo中& ...

  2. dubbo源码学习(四):暴露服务的过程

    dubbo采用的nio异步的通信,通信协议默认为 netty,当然也可以选择 mina,grizzy.在服务端(provider)在启动时主要是开启netty监听,在zookeeper上注册服务节点, ...

  3. 【2020-03-28】Dubbo源码杂谈

    前言 本周空闲时间利用了百分之六七十的样子.主要将Dubbo官网文档和本地代码debug结合起来学习,基本看完了服务导出.服务引入以及服务调用的过程,暂未涉及路由.字典等功能.下面对这一周的收获进行一 ...

  4. 从一段 Dubbo 源码到 CPU 分支预测的一次探险之旅

    每个时代,都不会亏待会学习的人. 大家好,我是 yes. 这次本来是打算写一篇 RocketMQ 相关文章的,但是被插队了,我也是没想到的. 说来也是巧最近在看 Dubbo 源码,然后发现了一处很奇怪 ...

  5. 渣渣菜鸡为什么要看 ElasticSearch 源码?

    前提 人工智能.大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需,大型企业早已淹没在系统生成的浩瀚数据流当中.大数据技术业已集中在如何存储和处理这些海量的数据上.Elast ...

  6. 基于dubbo源码包通过Maven构建dubbo的详细步骤

    通过Maven构建dubbo 既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?,我们先来看下dubbo的主要模块: 我们不仅要使用dubbo的核心框架,还要使用它的一些服务,比如管理控 ...

  7. 深度解剖dubbo源码

    -----------学习dubbo源码,能给你带来什么好处?----------- 1.提升SOA的微服务架构设计能力   通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服 ...

  8. Dubbo源码-Dubbo是如何随心所欲自定义XML标签的

    叨叨 今天考虑了很久要不要写这篇文章. 距离<Dubbo源码>系列的开篇到现在已经快两个月时间了.当时是想着工作上的RPC框架使用存在一些让人头疼的问题,就来看看Dubbo给出了一套什么样 ...

  9. Dubbo 源码分析 - 服务调用过程

    注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过 ...

随机推荐

  1. 英语学习[ZZ]

    本文作者三年间从四级勉强及格到高级口译笔试210,口试232.找工作面试时给其口试的老外考官听了一分钟就说你的英语不用考了.虽不敢说方法一定是最好的,但从现在开始随便谁不要再去找学习资料,每天花两个钟 ...

  2. 【HOJ1356】【Miller_rabin素性测试】Prime Judge

    Given a positive integer, your job is writing a program to determine whether it is a prime number or ...

  3. javascript--自己用的插件

    /** * Created by Administrator on 2015/4/2. * 时间:2012-6-6 作用:一对form标签下有多个(包括一个)表单需要提交时,提交当前作用域中的表单项做 ...

  4. ExtJs 第二章,Ext.form.Basic表单操作

    1.认识Ext.form.Panel表单面板         Ext.form.field.CheckBox 复选框 checkboxfield Ext.form.CheckBoxGroup 复选框组 ...

  5. iframe中在父窗口打开子页面

    我们在做页面框架的时候,通常会采用一个iframe来显示子页面,但有这么种情况,就是session失效时,登录页面就会显示在iframe中,这不符合常理,一般应该显示在顶部才对. 下面的js代码可以解 ...

  6. Bootstrap_表单_表单提示信息

    平常在制作表单验证时,要提供不同的提示信息.在Bootstrap框架中也提供了这样的效果.使用了一个"help-block"样式,将提示信息以块状显示,并且显示在控件底部. < ...

  7. DEDE更改版权信息

    DEDECMSV5.7版本出现后,在前台网页底部会出现织梦版权信息 “powered by  dedecms”,很多人都不知道怎么去掉 1. 方法一: 在include/dedesql.classs. ...

  8. S5PV210开发板刷机(SD卡uboot、串口+USB-OTG刷机方法)

    一.介绍 九鼎的S5PV210开发板,在出厂前已经默认刷了Android4.0系统.如果需要刷其它的系统或者是由于系统问题无法启动时,就需要对板子刷机. 其实,刷机是对210开发板的一个基础学习,目的 ...

  9. nodejs--book

    https://github.com/0xlen/nodejs-wiki-book http://www.nodebeginner.org/index-zh-cn.html http://book.n ...

  10. Borg Maze

    poj3026:http://poj.org/problem?id=3026 题意:在一个y行 x列的迷宫中,有可行走的通路空格’ ‘,不可行走的墙’#’,还有两种英文字母A和S,现在从S出发,要求用 ...