Dubbo框架的Hello World

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Dubbo框架的Hello World

       最近写基于 Dubbo 的 Demo,本来挺简单的一个 Demo 但是整了两个小时,而最后解决的方法是因为包名的问题。可能很多所谓的经验不过就是一个踩坑的经验。

Dubbo 介绍

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

     Dubbo 是阿里巴巴开发的框架,后来贡献给了 Apache 基金会。其 GitHub 地址如下:


https://github.com/apache/dubbo-spring-boot-project/blob/master/README_CN.md


      Dubbo 的出现背景可以参考 Dubbo 的官网:


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


      Dubbo 的官网也提供了一个 Demo 来进行快速入门,但是该 Demo 是以配置的方式来进行开发的,而不是使用注解进行开发的。官网的 Demo 地址如下:


http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

Dubbo 的 HelloWorld

      Dubbo 的服务注册中心需要 Zookeeper 来支持,这里就不对 Zookeeper 进行介绍了。


      我们来创建两个 Spring Boot 项目,一个是 provider,另外一个是 consumer。


      provider 用来提供一个服务,并注册到 Zookeeper 中,consumer 到 Zookeeper 中找到 provider 提供的服务,并进行远程调用。


      两个项目中关于 Dubbo 的依赖是相同,具体依赖如下:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>${dubbo.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>${dubbo.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.2.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
</dependency>

       这里使用的 Dubbo 的版本是 2.7.7,这个版本算是新的版本了。

provider 的代码

       创建 provider 的配置文件 application.yml,配置如下:

spring:
  application:
    name: provider
server:
  port: 8081
dubbo:
  registry:
    address: zookeeper://192.168.0.107:2181
  application:
    name: provider
  scan:
    base-packages: com.manong.dubbo.service.impl

      接着我们定义一个类文件 DemoServiceImpl.java,在该类文件中实现一个 say 方法,将该类和 say 方法抽象为一个接口 IDemoService.java,这个接口文件要提供给 consumer 进行使用。DemoServiceImpl.java 文件的代码如下:

@DubboService(version = "1.0.0", timeout = 10000, interfaceClass = IDemoService.class)
@Component
public class DemoServiceImpl implements IDemoService {
    @Override
    public String say(String name) {
        System.out.println("hi " + name + "!");
        return "hi " + name + "!";
    }
}

       可以看到,在类定义上增加了一个 @DubboService 的注解,该注解将会将该类作为服务被外部进行调用。

consumer 的代码

       consumer 的 Spring Boot 项目在创建时引入 Spring Web 的依赖,该项目作为一个 Web 项目来进行测试。它同样需要引入 Dubbo 和 Zookeeper 的依赖,依赖的配置和前面的相同。


       创建 consumer 的配置文件 application.yml,配置如下:

spring:
  application:
    name: comsumer
server:
  port: 8082
dubbo:
  application:
    name: comsumer
  registry:
    address: zookeeper://192.168.0.107:2181

       接着,将 provider 的 IDemoService.java 复制到该项目中,只是复制接口的定义(provider 和 consumer 是分别创建的,如果是聚合项目需要将接口定义再单独抽取成一个服务),并不复制接口实现类。

       然后定义一个 Controller 的类,类名是 TestController.java 文件,代码如下:

@RestController
@RequestMapping("/test")
public class TestController {
    @DubboReference(version = "1.0.0")
    IDemoService demoService;
    @RequestMapping("/say")
    public String say(String name)
    {
        return demoService.say(name);
    }
}

      这里我们通过 @DubboReference 注解将 Service 进行注入。

       这样两个项目的代码就完成了。

项目测试

       启动 Zookeeper 的服务,然后先运行 provider 的程序,待 provider 程序启动好,用 Zookeeper 的客户端连接 Zookeeper 的服务器,查看是否有 Dubbo 注册的服务。如果有 Dubbo 注册的服务,那么就启动 consumer 的项目,待 consumer 的项目启动成功后,我们打开浏览器访问 localhost:8082 来访问我们的接口,截图如下:20200822201038666.png

       可以看到,我们的服务调用成功了。


       网上关于 Dubbo 的注解的介绍更多的是旧版本的 @Service 和 @Reference,而不是本文中的 @DubboService 和 @DubboReference。不过它们的用法基本是一致的。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
XML Dubbo Java
【Dubbo3高级特性】「框架与服务」服务的异步调用实践以及开发模式
【Dubbo3高级特性】「框架与服务」服务的异步调用实践以及开发模式
157 0
|
6月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
365 9
|
6月前
|
监控 负载均衡 Dubbo
Dubbo 框架揭秘:分布式架构的精髓与魔法【一】
Dubbo 框架揭秘:分布式架构的精髓与魔法【一】
232 0
|
6月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
6月前
|
JSON Dubbo Java
微服务框架(二十)Dubbo Spring Boot 生产就绪特性
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Dubbo Spring Boot 生产就绪特性
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
242 17
微服务框架Dubbo环境部署实战
|
2月前
|
负载均衡 Dubbo NoSQL
Dubbo框架的1个核心设计点
Java领域要说让我最服气的RPC框架当属Dubbo,原因有许多,但是最吸引我的还是它把远程调用这个事情设计得很有艺术。
Dubbo框架的1个核心设计点
|
2月前
|
负载均衡 监控 Dubbo
分布式框架-dubbo
分布式框架-dubbo
|
2月前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架
下一篇
无影云桌面