新人一看就懂:Dubbo3 + Nacos的RPC远程调用框架demo

2022-11-18 14:12:31 浏览数 (1)

文章目录
  • 一、前言
    • Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?
  • 二、简介
  • 三、dubbo-api(对外暴漏的接口)
    • 1、pom依赖
    • 2、TestService接口
  • 四、dubbo-provider(服务提供者)
    • 1、pom依赖
    • 2、TestServiceImpl实现类
    • 3、application.yml
    • 4、DubboProviderApplication启动类
  • 五、dubbo-consumer(服务消费者)
    • 1、pom依赖
    • 2、TestController
    • 3、application.yml
    • 4、DubboConsumerApplication
    • 5、服务启动

一、前言

   之前有写过Dubbo2 Zookeeper的RPC远程调用框架demo,因为Dubbo3出来已经一段时间了,加上Zookeeper这玩意很少有人用了,所以结合实下流行的Dubbo3 Nacos搭建一套RPC远程调用框架demo。Nacos也是阿里出的,我前面的文章也有写过,是一个优秀的注册中心和配置中心。

Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?

   Feign是Spring Cloud的,基于http协议,缺点是不支持高并发。互联网流量大,RPC框架,性能消耗低,传输效率高,服务治理方便,所以大厂都喜欢用RPC框架,尤其是内部服务,当然不一定用Dubbo,大厂都有自研的RPC框架。Dubbo是阿里开源的,阿里自己已经不用了,他们内部还有一套更优秀的RPC框架。

二、简介

Dubbo3官网:https://dubbo.apache.org/zh/docs/v3.0/introduction/

  Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

  Dubbo3 基于 Dubbo2 演进而来,在保持原有核心功能特性的同时, Dubbo3 在易用性、超大规模微服务实践、云原生基础设施适配等几大方向上进行了全面升级。

三、dubbo-api(对外暴漏的接口)

以下采用的版本:

  • Dubbo:3.0.6
  • Nacos:2.0.3

1、pom依赖

代码语言:javascript复制
<!--Dubbo依赖-->
<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

2、TestService接口

代码语言:javascript复制
public interface TestService {
    /**
     * 获取名称
     *
     * @param id
     * @return
     */
    String getName(Integer id);
}

四、dubbo-provider(服务提供者)

1、pom依赖

代码语言:javascript复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
    </dependency>

    <!--依赖-->
    <dependency>
        <groupId>com.dubbo</groupId>
        <artifactId>dubbo-api</artifactId>
    </dependency>
</dependencies>

2、TestServiceImpl实现类

代码语言:javascript复制
@DubboService
public class TestServiceImpl implements TestService {
    @Override
    public String getName(Integer id) {
        // 模拟查询数据库操作,返回了"张三";
        return "张三";
    }
}

3、application.yml

代码语言:javascript复制
server:
  port: 8001

spring:
  application:
    name: dubbo-provider

dubbo:
  # 注册中心地址
  registry:
    address: nacos://192.168.60.123:8848
  protocol:
    name: dubbo
    port: 20880

4、DubboProviderApplication启动类

代码语言:javascript复制
@SpringBootApplication
@EnableDubbo(scanBasePackages = "com.dubbo.provider.service")
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

五、dubbo-consumer(服务消费者)

1、pom依赖

代码语言:javascript复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
    </dependency>

    <!--依赖-->
    <dependency>
        <groupId>com.dubbo</groupId>
        <artifactId>dubbo-api</artifactId>
    </dependency>
</dependencies>

2、TestController

代码语言:javascript复制
@RestController
public class TestController {
    @DubboReference
    private TestService testService;

    @GetMapping("/test")
    public String test(Integer id) {
        return testService.getName(id);
    }
}

3、application.yml

代码语言:javascript复制
server:
  port: 8002

spring:
  application:
    name: dubbo-consumer

dubbo:
  # 注册中心地址
  registry:
    address: nacos://192.168.60.123:8848?register=false
  protocol:
    name: dubbo
    port: -1

注意1:端口号-1,是为了让它自己递增。 注意2:有人遇到,消费者服务启动不起来!因为dubbo的客户端在启动的时候,默认检查是否有可用的远程服务。这边可以加上这个:

代码语言:javascript复制
consumer:
    # 取消服务启动检查
    check: false

4、DubboConsumerApplication

代码语言:javascript复制
@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }
}

5、服务启动

Nacos管理控制台 可以看到服务注册上来了,Dubbo 3支持多种注册模式,相比于 2.x 版本中的基于接口粒度的服务发现机制,3.x 引入了全新的基于应用粒度的服务发现机制。(默认接口和应用都注册)

浏览器访问:http://localhost:8002/test

到这里服务算是通了!

✅ 源码github下载地址:点这里,如果没有github,留下邮箱,会发你。

✅Dubbo 3 新增了不少核心特性,可以试试。(https://dubbo.apache.org/zh/docs/v3.0/new-in-dubbo3/)

0 人点赞