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

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

内容简介:官方提供的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

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

查看所有标签

猜你喜欢:

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

Linux二进制分析

Linux二进制分析

[美]瑞安 奥尼尔 / 棣琦 / 人民邮电出版社 / 2017-12-1 / CNY 59.00

二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案。 本书是一本剖析Linux ELF工作机制的图书,共分为9章,其内容涵盖了Linux环境和相关工具、ELF二进制格式、Linux进程追踪、ELF病毒技术、Linux二进制保护、Linux中的E......一起来看看 《Linux二进制分析》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具