首页 > 其他分享 >Dubbo 入门系列之基于 Dubbo API 开发微服务应用

Dubbo 入门系列之基于 Dubbo API 开发微服务应用

时间:2023-02-02 14:37:25浏览次数:63  
标签:Dubbo 入门 dubbo GreetingsService API samples apache org

目标

从零上手开发基于 Dubbo 的微服务

难度

环境要求

  • 系统:Windows、Linux、MacOS

  • JDK 8 及以上(推荐使用 JDK17)

  • Git

  • IntelliJ IDEA(可选)

  • Docker (可选)

动手实践

本章将通过手把手的教程一步一步教你如何从零开发一个微服务应用。

1. 启动注册中心

对于一个微服务化的应用来说,注册中心是不可或缺的一个组件。只有通过注册中心,消费端才可以成功发现服务端的地址信息,进而进行调用。

为了让本教程更易于上手,我们提供了一个基于 Apache Zookeeper 注册中心的简易启动器,如果您需要在生产环境部署注册中心,请参考生产环境初始化一文部署高可用的注册中心。

Windows:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper

Linux / MacOS:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw clean compile exec:java -pl tools/embedded-zookeeper

Docker:
docker run --name some-zookeeper --restart always -d zookeeper

2. 初始化项目

从本小节开始,将基于 IntelliJ IDEA 进行工程的搭建以及测试。

如上图所示,可以建立一个基础的项目。

在初始化完项目之后,需要在 src/main/java 目录下创建 org.apache.dubbo.samples.apiorg.apache.dubbo.samples.clientorg.apache.dubbo.samples.provider 三个 package。

后续我们将在 api 下创建对应的接口,在 client 下创建对应客户端订阅服务的功能,在 provider 下创建对应服务端的实现以及发布服务的功能。

上述三个 package 分别对应了应用共同依赖的 api、消费端应用的模块、服务端应用的模块。在实际部署中需要拆成三个工程,消费端和服务的共同依赖 api 模块。从简单出发,本教程将在同一个工程中进行开发,区分多个启动类。

3. 添加 Maven 依赖

在初始化完项目以后,我们需要先添加 Dubbo 相关的 maven 依赖。

编辑 pom.xml 这个文件,添加下列配置。

    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>3.2.0-beta.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.8.0</version>
            <exclusions>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty-handler</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty-transport-native-epoll</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

在这份配置中,定义了 dubbo 和 zookeeper(以及对应的连接器 curator)的依赖。

添加了上述的配置以后,可以通过 IDEA 的 Maven - Reload All Maven Projects 刷新依赖。

4. 定义服务接口

服务接口 Dubbo 中沟通消费端和服务端的桥梁。

org.apache.dubbo.samples.api 下建立 GreetingsService 接口,定义如下:

package org.apache.dubbo.samples.api;

public interface GreetingsService {

    String sayHi(String name);
}

GreetingsService 中,定义了 sayHi 这个方法。后续服务端发布的服务,消费端订阅的服务都是围绕着 GreetingsService 接口展开的。

5. 定义服务端的实现

定义了服务接口之后,可以在服务端这一侧定义对应的实现,这部分的实现相对于消费端来说是远端的实现,本地没有相关的信息。

org.apache.dubbo.samples.provider 下建立 GreetingsServiceImpl 类,定义如下:

package org.apache.dubbo.samples.provider;

import org.apache.dubbo.samples.api.GreetingsService;

public class GreetingsServiceImpl implements GreetingsService {
    @Override
    public String sayHi(String name) {
        return "hi, " + name;
    }
}

GreetingsServiceImpl 中,实现了 GreetingsService 接口,对于 sayHi 方法返回 hi, name

6. 服务端发布服务

在实现了服务之后,本小节将通过 Dubbo 的 API 在网络上发布这个服务。

org.apache.dubbo.samples.provider 下建立 Application 类,定义如下:

package org.apache.dubbo.samples.provider;

import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.api.GreetingsService;

public class Application {
    public static void main(String[] args) {
        // 定义具体的服务
        ServiceConfig<GreetingsService> service = new ServiceConfig<>();
        service.setInterface(GreetingsService.class);
        service.setRef(new GreetingsServiceImpl());

        // 启动 Dubbo
        DubboBootstrap.getInstance()
                .application("first-dubbo-provider")
                .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
                .protocol(new ProtocolConfig("dubbo", -1))
                .service(service)
                .start()
                .await();
    }
}

org.apache.dubbo.samples.provider.Application 中做了两部分的功能:首先是基于 ServiceConfig 定义了发布的服务信息,包括接口的信息以及对应的实现类对象;然后是配置 Dubbo 启动器,传入了应用名,注册中心地址,协议的信息以及服务的信息等。

注:DubboBootstrap 中的registryprotocolservice 可以多次传入。

7. 消费端订阅并调用

对于消费端,可以通过 Dubbo 的 API 可以进行消费端订阅。

org.apache.dubbo.samples.client 下建立 Application 类,定义如下:

package org.apache.dubbo.samples.client;

import java.io.IOException;

import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.api.GreetingsService;

public class Application {
    public static void main(String[] args) throws IOException {
        ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
        reference.setInterface(GreetingsService.class);

        DubboBootstrap.getInstance()
                .application("first-dubbo-consumer")
                .registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
                .reference(reference);

        GreetingsService service = reference.get();
        String message = service.sayHi("dubbo");
        System.out.println("Receive result ======> " + message);
        System.in.read();
    }
}

org.apache.dubbo.samples.client.Application 中做了三部分的功能:

首先是基于 ReferenceConfig 定义了订阅的服务信息,包括接口的信息。

其次是配置 Dubbo 启动器,传入了应用名,注册中心地址,协议的信息以及服务的信息等。

最后是获取到动态代理的对象并进行调用。

注:DubboBootstrap 中支持 servicereference 可以同时传入,意味着一个应用可以同时即是消费端、也是服务端。

8. 启动应用

截止第 7 步,代码就已经开发完成了,本小节将启动整个项目并进行验证。

首先是启动 org.apache.dubbo.samples.provider.Application ,等待一会出现如下图所示的日志(DubboBootstrap awaiting)即代表服务提供者启动完毕,标志着该服务提供者可以对外提供服务了。

[DUBBO] DubboBootstrap awaiting ..., dubbo version: 3.2.0-beta.4, current host: 169.254.44.42

然后是启动org.apache.dubbo.samples.client.Application ,等待一会出现如下图所示的日志(hi, dubbo )即代表服务消费端启动完毕并调用到服务端成功获取结果。

Receive result ======> hi, dubbo

延伸阅读

1. Dubbo 的配置介绍

Dubbo 的主要配置入口有ReferenceConfigServiceConfigDubboBootstrap ,更多的细节可以参考 API 配置 | Apache Dubbo 一文。

2. 除了 API 方式其他的使用方式

Dubbo 除了 API 方式还支持 Spring XML、Annotation、Spring Boot 等配置方式,在下一个教程中将就 Spring Boot 配置方式讲解如何进行快速开发。

关于 XML 和 Annotation 的细节可以参考 XML 配置 | Apache DubboAnnotation 配置 | Apache Dubbo 疑问。

更多

本教程介绍了如何基于 Dubbo 的纯 API 开发一个微服务应用。下一个教程中,将介绍如何基于 Spring Boot 开发微服务项目。

欢迎在 https://github.com/apache/dubbo 给 Dubbo Star。
搜索关注官方微信公众号:Apache Dubbo,了解更多业界最新动态,掌握大厂面试必备 Dubbo 技能

标签:Dubbo,入门,dubbo,GreetingsService,API,samples,apache,org
From: https://www.cnblogs.com/apache-dubbo/p/17085885.html

相关文章

  • json格式数据,淘宝1688京东商品详情获取,便携式API接口
    商品详情API接口,万邦数据返回值说明,商品详情,关键词搜索,价格监控,卖家买家订单等相关数据接口商品详情获取 测试接口 json格式数据 "item":{ "num_iid":"583191269......
  • Apipost产品介绍
    Apipost主要分为4个大模块,贯穿一个API从设计到测试完成上线的研发全周期:API设计:用于在接口还没开发完成时,预定义接口请求参数和响应期望(Mock),并自动生成MockURL,让......
  • API(SimpleDateFormat)
    SimpleDateFormat的作用:可以格式化,把时间变成我们喜欢的类型,还可以解析,把字符串表示的时间变成Date对象public  SimpleDateFormat()默认格式public  SimpleDateForm......
  • Kaka入门级教程
    Kaka知识全解析ApacheKafka是什么?摘抄自官网首页的一段话:ApacheKafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用......
  • 使用Postman调用Dynamics CRM Web API (OAuth2.0)
    1.在Azure注册应用(1)登录https://portal.azure.com/(2)新建应用(3)注册应用重定向URI选择Web并填写http://localhost(4)修改清单配置(仔细点)打开清单配置后,修改allowPublic......
  • 如何快速完成API设计,mock数据给到前端?
    API设计能做什么?提示:API设计的主要作用是为了预先定义接口请求参数以及响应期望并生成MockURL,如果您仅仅需要调试接口,直接进​​API调试​​模块即可,无需在​​API设计......
  • python入门之列表推导式
    """列表推导式定义:使用简易方法,将可迭代对象转换为列表语法:变量=[表达式for变量in可迭代对象]变量=[表达式for......
  • Tensorflow人工智能入门(二)
     translatorAfrikaansAlbanian-shqipeArabic-‎‫العربية‬‎Armenian-ՀայերէնAzerbaijani-azərbaycancaBasque-euskaraBelarus......
  • 树链剖分入门
    目录树链剖分算法思想模版-树链剖分旅行P4374P4211CF1023FP1505P2486P7735P3976Trick总结树链剖分这玩意也是才开始预习,写得不好勿喷。约定记号:\(siz[x]\),\(x\)为根的......
  • Git入门图文教程(1.5W字40图)
     Git入门图文教程(1.5W字40图)......