超简单,手把手教你搭建Dubbo工程(内附源码)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 超简单,手把手教你搭建Dubbo工程(内附源码)

前言

今天又是手把手教程的一篇————手把手教你搭建Dubbo项目,边搭建边教,一共两种模式的工程,文中还有工程源码压缩包,也欢迎下载



一、本地调用工程

1. 本地模型介绍

我们首先看Dubbo的宏观模型

15b61f113d1f4fcea8abb44c2f73ee08.png


我们不难看出,Dubbo至少有 服务提供者 、服务消费者、注册中心 三个部件,但是其实我们可以先不引入额外的注册中心,只在本地进行调用,Dubbo提供了本地调用的功能,即同一个JVM进程内进行的Dubbo服务调用,且在2.2.0 后默认为所有的服务都进行本地暴露,其模型如下:

1197a3dd0904491a8985ec841f860e73.png


那么我们可以创建这样一个工程,其中分为两个模块,一个api模块负责定义接口,一个service模块负责实现服务提供方 和 服务消费者的代码,工程如下图,我已经上传本工程,可以 点此下载


2b85fccc880a456fa0496dfa858b03f4.png

2. 工程分析

我们先定义一下API了,就是写一个接口,非常简单

package com.zhanfu.dubbo.demo.dubbo.api;
public interface DemoService {
    String sayHello(String name);
}

接下来写实现类,这里的关键就是,在该实现类上加上 @DubboService 注解

package com.zhanfu.dubbo.demo.dubbo.service;
import com.zhanfu.dubbo.demo.dubbo.api.DemoService;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "你好啊, " + name;
    }
}

然后写消费者,在消费者里引用API,并写上 @DubboReference 注解。此处的 @Component 注解和实现 CommandLineRunner 接口是为了让其在Springboot 工程内被发现,和自动执行

package com.zhanfu.dubbo.demo.dubbo.consumer;
import com.zhanfu.dubbo.demo.dubbo.api.DemoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class Consumer implements CommandLineRunner {
    @DubboReference
    private DemoService demoService;
    @Override
    public void run(String... args) throws Exception {
        String result = demoService.sayHello("战斧");
        System.out.println("收到消息:" + result);
    }
}

接着别忘了写工程的启动类,注意启动类上的注解:@EnableDubbo


package com.zhanfu.dubbo.demo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubbo
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

最后写上配置类 application.properties


# 设置dubbo传输协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
# Dubbo 应用名
dubbo.application.name=DemoApplication
dubbo.application.logger=slf4j

3. 启动验证

点击启动类进行启动

7bedb66cacc14ef6b0e548bf1b7f2ede.png


工程成功启动,且消费者本地调用成功


a38a1926a7554fb2ab6e70ef6f75d6ae.png


二、RPC工程

1. ZK 安装

15b61f113d1f4fcea8abb44c2f73ee08.png

要想进行RPC的功能,我们必须得先弄好注册中心,这里选取Zookeeper作为我们的注册中心,如果你的环境已经有zk,可跳出此步骤。如果没有,你可以 点击此处 进入具体安装的教程,安装完成后记得启动


2. 工程分析

消费者与实现类代码其实同单机一样,只是需要把服务提供者和消费者拆开,拆成不同的模块单独启动,这里拆到了client和server两个模块,点此下载 其工程压缩包


764f833b083746d2b87f7477b4e53c6c.png

然后再写两个模块的配置文件,服务端要加入注册中心地址,然后先启动,其配置如下

# Dubbo 应用名
dubbo.application.name=DubboServer
dubbo.application.logger=slf4j
# 设置dubbo传输协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.address=zookeeper://127.0.0.1:2181

消费者的配置如下,因为qos默认端口22222已经被服务端占用,所以消费端定义成了22223

# Dubbo 应用名
dubbo.application.name=DubboClient
dubbo.application.logger=slf4j
# 服务质量端口
dubbo.application.qos-port=22223
# 设置dubbo传输协议
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.registry.address=zookeeper://127.0.0.1:2181

3. 启动验证

先启动server,然后再启动client,观察其输出

5c2355b69a6b473491aaac7b8bf360d6.png


效果符合预期,我们再进入ZKUI看看现在Zookeeper的情况,可以看到接口已经注册到Zk,消费者和提供者也注册成功

e901d12d32e24fbea44125bb298f5930.png


三、总结

本次,我们学习了两种dubbo的调用模式 ———— RPC和本地调用,也初步接触到了几个关键注解,如


@EnableDubbo

@DubboReference

@DubboService

但现在我们还没有解释这些注解的作用和其原理,以及 Dubbo 是如何和 Spring 框架相辅相成的。别急,这些内容将在后面的博文仔细为你解答


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
5月前
|
缓存 Dubbo Java
趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了
趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了
|
5月前
|
Dubbo Java 应用服务中间件
从源码全面解析 dubbo 服务端服务调用的来龙去脉
从源码全面解析 dubbo 服务端服务调用的来龙去脉
|
8月前
|
Dubbo Java 应用服务中间件
由浅入深Dubbo核心源码剖析服务暴露与发现3
由浅入深Dubbo核心源码剖析服务暴露与发现3
46 0
|
8月前
|
XML Dubbo Java
由浅入深Dubbo核心源码剖析服务暴露与发现1
由浅入深Dubbo核心源码剖析服务暴露与发现1
67 0
|
8月前
|
监控 Dubbo Java
由浅入深Dubbo核心源码剖析SPI机制 2
由浅入深Dubbo核心源码剖析SPI机制
31 0
|
8月前
|
缓存 Dubbo Java
由浅入深Dubbo核心源码剖析SPI机制 1
由浅入深Dubbo核心源码剖析SPI机制
53 0
|
8月前
|
XML Dubbo 架构师
由浅入深Dubbo核心源码剖析高阶配置运用1
由浅入深Dubbo核心源码剖析高阶配置运用
50 0
|
8月前
|
Dubbo Java 应用服务中间件
由浅入深Dubbo核心源码剖析SpringBoot整合使用
由浅入深Dubbo核心源码剖析SpringBoot整合使用
88 0
|
8月前
|
监控 Dubbo Java
由浅入深Dubbo核心源码剖析环境介绍
由浅入深Dubbo核心源码剖析环境介绍
181 0
|
8月前
|
编解码 Dubbo 应用服务中间件
Alibaba开源Dubbo源码解析手册,竟引领出RPC的新潮流
前言 Apache Dubbo,一款由阿里巴巴于2011年开源的高性能Java RPC框架,自开源以来在业界产生了深远影响。有大量公司广泛使用,甚至很多公司的自研RPC框架中都能看到Dubbo的影子。Dubbo在国内服务化体系演进过程中扮演了重要角色。尽管经历了几年的沉寂,但在阿里巴巴重启对Dubbo的开源维护,Dubbo正在从微服务领域的高性能RPC框架逐步演变为一个完整的微服务生态。 对于开发者来说,深入了解Dubbo底层的架构设计和实现是一项挑战。因此,一份完整的、体系化的对Apache Dubbo进行深入原理剖析的手册就显得尤为重要。