dubbo入门

Posted by Xsp on October 16, 2018

http://dubbo.apache.org/zh-cn/index.html

一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

节点角色说明
节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器
调用关系说明
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于 长连接 推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

dubbo-demo运行

下载地址:https://github.com/apache/incubator-dubbo/tree/master/dubbo-demo

用Idea打开为maven项目后,添加 -Djava.net.preferIPv4Stack=true 即可运行

默认注册中心用的是多播

<dubbo:registry address="multicast://224.5.6.7:1234"/>

可以改成zookeeper

<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

官方的demo直接这样改之后报错:

Exception in thread "main" java.lang.IllegalStateException: No such extension org.apache.dubbo.configcenter.DynamicConfiguration by name zookeeper

一番尝试之后,可以通过在dubbo-demo的根目录下的pom文件中添加依赖如下:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.6.3</version>
    </dependency>
</dependencies>

注意2.6.2及以上才行。暂不清楚原因,之后再看吧。。

但是这样改了之后。。RpcContext变成null了。。。

再次解决:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>

参考

  • http://dubbo.apache.org/zh-cn/docs/user/preface/background.html