Dubbo项目入门

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

它的特性如下

  • 面向接口代理的高性能RPC调用
  • 智能负载均衡
  • 服务自动注册与发现
  • 高度可扩展能力
  • 运行期流量调度
  • 可视化的服务治理与运维

Talk is cheap, Show me the code。现在来着手搭建一个Dubbo项目吧。

搭建一个xml配置的Dubbo项目

创建三个项目

  • service-api 服务提供者和服务消费者共用的接口
  • service-consumer 服务消费者
  • service-provider 服务提供者

共用的接口

先在service-api定义一个公用接口

public interface DemoService {
    String sayHello(String name);
}

服务提供者

服务提供者service-provider提供一个DemoService的实现类

public class DemoServiceImpl implements DemoService {

    @Override
    public String sayHello(String name) {
        System.out.println("[" + LocalDate.now() + "] Hello " + name );
        return "Hello " + name;
    }

}

编写xml配置文件

配置应用名称

<dubbo:application name="demo-provider"/>

配置注册中心

可以使用Multicast、Redis、Zookeeper、Simple这四个作为注册中心。

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

配置协议

默认为dubbo

<dubbo:protocol name="dubbo" port="20880"/>

定义bean

然后定义bean,以及将bean作为服务暴露出去

<bean id="demoService" class="com.learnDubbo.demo.provider.DemoServiceImpl"/>

<dubbo:service interface="com.learnDubbo.demo.DemoService" ref="demoService"/>

main函数

编写一个main函数用于启动服务提供者

public static void main(String[] args) throws Exception {

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");
    context.start();

    System.in.read();//用于阻塞函数,使其一直运行
}

服务消费者

服务消费者需要调用service-provider 服务提供者提供的DemoService实现类

同样需要编写xml文件,配置文件和服务提供者的类似,不同的是需要将暴露服务的配置修改为引用服务的配置,如下

引用服务

<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/>

main函数

编写一个main函数用于启动服务消费者,然后一直循环调用服务提供者提供的服务

public static void main(String[] args) {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml");
    context.start();
    DemoService demoService = (DemoService) context.getBean("demoService"); // 调用服务提供者提供的服务
    while (true) {
        try {
            Thread.sleep(1000);
            String hello = demoService.sayHello("Dubbo"); // call remote method
            System.out.println(hello); // get result
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}

测试

先启动service-provider项目,然后在启动service-consumer,输出结果如下

搭建一个注解的Dubbo项目

服务提供者和服务消费者共用的接口还是使用service-api,新建下面两个项目

  • service-consumer-annotation 基于注解的服务消费者
  • service-provider-annotation 基于注解的服务提供者

基于注解的服务提供者

新建一个springboot项目

同样需要提供一个DemoService的实现类,且在类上增加@Service注解

注:是com.alibaba.dubbo.config.annotation.Service

不是org.springframework.stereotype.Service

别导错了

接下来需要增加dubbo的配置类

@Configuration
public class DubboConfiguration {

    /**
     * 对应xml配置:<dubbo:application name="demo-provider"/>
     * @return
     */
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("demo-provider--annotation");
        return applicationConfig;
    }

    /**
     * 对应xml配置:<dubbo:registry address="multicast://224.5.6.7:1234"/>
     * @return
     */
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("multicast://224.5.6.7:1234");
        return registryConfig;
    }
}

最后一步在启动类上增加注解@DubboComponentScan(basePackages = "com.learnDubbo.demo.provider.service")basePackages自行修改为提供服务类所在的包路径

基于注解的服务消费者

也是需要有一个配置类,和服务提供者类似,这里就不贴代码了

接下来创建一个Controller,用于测试结果,代码如下

@RestController
public class DemoController {

    @Reference
    private DemoService demoService;

    @GetMapping("sayHello")
    public String sayHello(){
        return demoService.sayHello("Dubbo");
    }
}

@Reference注解表示引用服务类似于xml配置

<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/>

在项目启动类上同样需要注解@DubboComponentScan指定dubbo扫描路径

测试

同xml配置的一样,需要先启动服务提供者


配置信息

配置信息主要包括3大块,注册中心、协议和schema配置

注册中心

注册中心总共有4个,如下

注册中心 简要说明 dubbo文档介绍
Multicast 不需要启动任何中心节点,只要广播地址一样,就可以互相发现。 链接
zookeeper Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。 链接
Redis 一个高效的 KV 存储服务器 , 从 2.1.0 版本开始支持 。 链接
Simple 一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。 链接

使用Redis注册中心

当使用Redis注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方

<dubbo:registry address="redis://localhost:6379"/>

对应的redis会产生如下数据

可以看到有两个key,分别对应服务提供者和消费者。两个key对应的数据类型为Hash,可以看到服务消费者key的数据如下

1) "consumer://192.168.79.170/com.learnDubbo.demo.DemoService?application=demo-consumer&category=consumers&check=false&dubbo=2.6.2&interface=com.learnDubbo.demo.DemoService&methods=sayHello&pid=14208&side=consumer&timestamp=1534389723130"
2) "1534389813690"

第一个为URL址,第二个为过期时间。

官网给的图如下

使用Zookeeper注册中心

当使用Zookeeper注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方

<dubbo:registry address="zookeeper://localhost:2181"/>

对应的Zookeeper会产生如下数据

下图是官网给出的数据图

有些出入,但大致还是相同的,多了configurators和routers。

当服务提供者启动时: 会创建对应的目录结构,例如我上面代码中的共用接口名为com.learnDubbo.demo.DemoService,就会创建 /dubbo/com.learnDubbo.demo.DemoService目录,然后在创建providers目录,再在providers目录下写入自己的 URL 地址。

当服务消费者启动时:会在/dubbo/com.learnDubbo.demo.DemoService目录创建 consumers目录,并在consumers目录写入自己的 URL 地址。

当监控中心启动时: 订阅 /dubbo/com.learnDubbo.demo.DemoService 目录下的所有提供者和消费者 URL 地址。

协议

协议 简要说明 dubbo文档介绍
dubbo Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。 链接
rmi RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。 链接
hessian Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。 链接
http 基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现。 链接
webservice 基于 WebService 的远程调用协议,基于 Apache CXF 的 frontend-simple 和 transports-http 实现 。 链接
thrift 当前 dubbo 支持的 thrift 协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信息,比如 service name,magic number 等。 链接
memcached 基于 memcached实现的 RPC 协议。 链接
redis 基于 Redis 实现的 RPC 协议。 链接
rest 基于标准的Java REST API——JAX-RS 2.0(Java API for RESTful Web Services的简写)实现的REST调用支持 链接

schema配置的涉及的东西有点多这里就不列出来了



参考资料:Dubbo官网

官网的介绍都很详细了,从官网中一般都能获取到你想到的信息。

有需要查看这篇博文的源码的可以点这里:Github地址

原文地址:https://www.cnblogs.com/fixzd/p/9490247.html

时间: 2024-07-29 20:43:05

Dubbo项目入门的相关文章

转 Katana 项目入门

Katana 项目入门 Howard Dierking 当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每天访问 Internet 的时间为 46 分钟,大约有 3 百万个网站. 仅仅在 10 年之后,相同的测量指标揭示,大约有 22.7 亿个 Internet 用户,每个用户平均每天访问 Internet 的时间为 4 小时,大约有 5.55 亿个网站(请参阅bit.ly/MY7GzO). 很显然,这

GEF(Graphical Editor Framework) Eclipse项目入门系列(2)---Draw2D开发环境的搭建

GEF(Graphical Editor Framework) Eclipse项目入门系列(1)---概述中,我们已经提到了Draw2D框架是GEF框架的重要组成部分.那么Draw2D的环境如何搭建起来呢?其实很简单,去Eclipse的官方网站下载一个Eclipse的开发环境(这一部门我就不再赘述,网上的资料很多).笔者本人的电脑上装的是Indigo,所以笔者将会以Eclipse Indigo为例子给大家演示Draw2D开发环境的搭建.具体情况,请见下面的步骤. (1) 打开Indigo Ecl

GEF(Graphical Editor Framework) Eclipse项目入门系列(3)---Draw2D例子演示

在"GEF(Graphical Editor Framework) Eclipse项目入门系列(2)---Draw2D开发环境的搭建"一文中,我给大家介绍了Draw2D的开发环境的搭建.下一步,根据软件行业的惯例,需要展示一个例子,这样大家才更有兴趣去学习和探索这门技术.好了,废话少说,作者就借花献佛,用Dan Rubel,Jaimen Wren和Eric Clayberg的一个例子Draw2D的例子和大家分享一下.这个例子包括两个类,GenealogyView和FigureMover

Dubbo 从入门到精通 视频教程

Dubbo 从入门到精通 视频教程 附带源码 和 PPT: 需要的同学 加我QQ 1143815700,发个红包意思下就行哈

dubbo项目开发实战

dubbo结合spring boot,直接采用注解的方式,没有采用xml配置使用的是zookeeper作为服务注册中心spring cloud的服务化是使用的restful的方式,是基于http,但是http请求会有连接的问题存在,因此使用dubbo的rpc的方式是比较好的服务化的实现方式.服务化的基本要素是一个服务需要能独立完成一个业务内容,否则会导致分布式事务的问题. 1:创建空的maven项目,引入依赖: <!--dubbo--> <dependency> <group

Dubbo 项目学习(四) 接口抽取以及依赖版本统一

引言 前面的系列项目中,我们会发现有个接口是一样的,我们需要单独抽取出来,统一维护,这样可以更加高效的处理项目.同时,两个项目的maven依赖包也可以统一维护,这样有助于项目在多人协作的同时,保证项目依赖的统一性. 系列文档目录 Dubbo 项目学习(一) Admin 管理控制台 Dubbo 项目学习(二) 发布Dubbo服务 Dubbo 项目学习(三) 消费Dubbo服务 Dubbo 项目学习(四) 接口抽取及以来版本统一 创建父工程 我们新建一个dubbo-parent项目,作为父级工程,用

分布式Dubbo快速入门

Dubbo入门Editor:SimpleWuDubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是关键

rpc框架dubbo学习入门及环境搭建(spring boot+Kotlin)

学习之前,确保有以下知识基础: Java网络编程 Socket传输数据 IO流 rpc简介及实现 rpc是remote procedure call的简写,意思为远程过程调用. rpc应用较多的情景是分布式开发,那什么是分布式开发呢? 原本我也是想自己解释的,奈何网上大佬解释得很清楚了,这里就不献丑了,建议阅读完下面推荐的几篇再继续往下 [转]分布式架构的演进(JavaWeb) 如何给老婆解释什么是RPC 如何实现一个简单的RPC 刚开始的时候,服务和调用都是在同一机器,这叫本地过程调用 之后,

分布式服务框架 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.