在spring boot中3分钟上手RPC框架Dubbo

栏目: Java · 发布时间: 7年前

内容简介:官方提供的demo太多,内容也很详细,资料也多,导致不易快速上手,以下是我根据官方文档整理出来的快速上手步骤首先rpc调用都需要有注册中心,zookeeper, nacos,redis等都可以拿来作为注册中心 这里为了演示方便我们还是拿经典的zookeeper做演示完整代码已上传github:

官方提供的demo太多,内容也很详细,资料也多,导致不易快速上手,以下是我根据官方文档整理出来的快速上手步骤

首先rpc调用都需要有注册中心,zookeeper, nacos,redis等都可以拿来作为注册中心 这里为了演示方便我们还是拿经典的zookeeper做演示

完整代码已上传github: github.com/neatlife/my… 下载后启动zookeeper即可运行

获取一个可用的zookeeper实例

可以使用 docker 启动zookeeper,比如 docker-compose-single.yml

version: '3.1'

services:
    zoo:
        image: 31z4/zookeeper
        restart: always
        hostname: zoo1
        ports:
            - 2181:2181
复制代码

然后执行 docker-compose -f docker-compose-single.yml up -d 命令启动zookeeper实例

执行 lsof -i :2181 查看效果

在spring boot中3分钟上手RPC框架Dubbo

可以看到zookeeper已经在2181端口进行监听了

规划模块

一个rpc服务至少需要以下4个模块组成

模块名 作用
my-api 给my-provider和my-consumer
提供统一的接口和数据传输dto
my-provider 服务提供方
my-consumer 服务消费方
my-dubbo-spring-boot 项目外层模块,组织以上3个模块
非必须,可以提供一些子模块可以复用的依赖,属性等

在idea中创建项目my-dubbo-spring-boot和三个子模块,都使用maven来管理依赖

在spring boot中3分钟上手RPC框架Dubbo

my-provider和my-consumer都要依赖dubbo库

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.1</version>
</dependency>

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
</dependency>
复制代码

my-api提供通用依赖,所以不需要任何依赖 因为是spring boot项目,所以spring boot依赖肯定是有的,完整依赖可以去github查看源代码

<!-- Spring Boot dependencies -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
复制代码

编写消费者和服务提供者的接口

在模块my-api中创建服务接口DemoService,代码如下

package com.demo.consumer;

/**
 * Demo Service interface
 *
 * @since 2.7.0
 */
public interface DemoService {

    String sayHello(String name);

}
复制代码

这个就是服务提供者需要提供的服务

然后在my-consumer和my-provider模块中都依赖这个my-api模块,代码如下:

<dependency>
    <groupId>com.demo</groupId>
    <artifactId>my-api</artifactId>
    <version>2.7.1</version>
</dependency>
复制代码

编写服务提供者

在my-provider里实现DemoService,核心代码如下

@Service(version = "${demo.service.version}")
public class DefaultDemoService implements DemoService {

    /**
     * The default value of ${dubbo.application.name} is ${spring.application.name}
     */
    @Value("${dubbo.application.name}")
    private String serviceName;

    @Override
    public String sayHello(String name) {
        return String.format("[%s] : Hello, %s", serviceName, name);
    }
}
复制代码

然后在项目配置文件声明服务提供者的名字等配置,核心配置如下

# Spring boot application
spring.application.name=my-provider
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.demo.provider

# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
## dubbo.application.name=${spring.application.name}

# Dubbo Protocol
dubbo.protocol.name=dubbo
## Random port
dubbo.protocol.port=-1

## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache

## DemoService version
demo.service.version=1.0.0
复制代码

然后启动服务者,查看控制台输出效果

在spring boot中3分钟上手RPC框架Dubbo

编写服务消费者

在my-consumer里调用DemoService,核心代码如下

@EnableAutoConfiguration
public class MyConsumerApplication {

    private final Logger log = LoggerFactory.getLogger(getClass());

    @Reference(version = "${demo.service.version}")
    private DemoService demoService;

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

    @Bean
    public ApplicationRunner runner() {
        return args -> log.error(demoService.sayHello("World"));
    }
}
复制代码

为了看到明显的输出效果,这里使用了log.error

启动项目,查看调用效果

在spring boot中3分钟上手RPC框架Dubbo

可以看到输出里带了服务提供者加上的字符串 Hello

一些注意的点

my-api 模块作为dubbo消费者和服务提供者的通用依赖,可以提供通用的服务接口,服务输入,输出dto等

spring boot dubbo官方有提供一个内置的zookeeper,参考: EmbeddedZooKeeper.java ,作者认为一般不会用这种方式启动zookeeper,所以使用docker启动了一个zookeeper,可以自行选择

可以加作者微信一起研究dubbo的使用和原理

在spring boot中3分钟上手RPC框架Dubbo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ActionScript 3.0 Cookbook

ActionScript 3.0 Cookbook

Joey Lott、Darron Schall、Keith Peters / Adobe Dev Library / 2006-10-11 / GBP 28.50

Well before Ajax and Microsoft's Windows Presentation Foundation hit the scene, Macromedia offered the first method for building web pages with the responsiveness and functionality of desktop programs......一起来看看 《ActionScript 3.0 Cookbook》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换