基于SpringBoot2.0.x+Dubbo2.6.x+zookeeper3.4.1x创建RPC服务

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 下图是dubbo官网给的图。在系统越来越庞大的情况下,分布式就显得尤为重要了,应用之间交互是不可避免的,将核心业务抽取出来,作为独立的服务,然后逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

由于公司使用的是springboot+dubbo的分布式架构,虽然个人更偏向于springcloud,但是日常中使用dubbo更多,所以也参考了很多的资料,自己搭建了一个基于目前最新版本的RPC服务demo。(springboot 2.0.5+dubbo2.6.3+zookeeper3.4.10)用来熟悉dubbo和学习相关技术,把搭建过程记录下来,防止自己和他人踩坑。


下图是dubbo官网给的图。在系统越来越庞大的情况下,分布式就显得尤为重要了,应用之间交互是不可避免的,将核心业务抽取出来,作为独立的服务,然后逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

20180913151432208.jpg

在项目搭建之前首先需要一个注册中心,dubbo推荐使用zookeeper,所以我这里使用的也是zookeeper,下载地址:http://zookeeper.apache.org/。下载完成后解压就行。不会的参考:http://dubbo.apache.org/zh-cn/docs/admin/install/zookeeper.html

首先使用idea创建一个空的springboot项目用来做多模块的父工程:spring-boot-dubbo-parent。这里要注意把打包方式改为pom类型。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.wangzc</groupId>
    <artifactId>spring-boot-dubbo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>spring-boot-dubbo-parent</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project


然后在父工程下创建一个module:spring-boot-dubbo-api。用来存放所有的公共接口。pom文件同上,打包类型为jar。

再创建一个服务生产者:spring-boot-dubbo-provider。这里需要添加dubbo以及zookeeper的包,同时使用dubbo官方给出的starter。github地址:https://github.com/apache/incubator-dubbo-spring-boot-project(不是alibaba的那个,那个不维护了。)同时引入刚才创建的api。


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.wangzc</groupId>
    <artifactId>spring-boot-dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>spring-boot-dubbo-provider</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.wangzc</groupId>
            <artifactId>spring-boot-dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>


最后一个就是服务消费者了:spring-boot-dubbo-consumer。pom文件同上,多了一个web包。


<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>


parent的pom文件引入3个module


<modules>
    <module>spring-boot-dubbo-api</module>
    <module>spring-boot-dubbo-provider</module>
    <module>spring-boot-dubbo-consumer</module>
</modules>


这里就用dubbo官网给出的最简单的sayHello例子用来验证服务是否发布成功,在api的module包下创建一个接口用来提供服务。


package com.FarStars.springbootdubboapi.service;
/**
 * @author FarStars
 * @date 2018/9/13
 */
public interface HelloService {
    /**
     * sayHello
     *
     * @author FarStars
     * @param name name
     * @return java.lang.String
     */
    String sayHello(String name);
}


provider的application.properties配置文件:


# Spring boot application
spring.application.name = spring-boot-dubbo-provider
server.port = 9090
management.port = 9091
# Service version
provider.service.version = 1.0.0
# Base packages to scan Dubbo Components (e.g @Service , @Reference)
# 实现类的包路径(换成自己的)
dubbo.scan.basePackages  = com.xxx.springbootdubboprovider.impl
# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-provider
dubbo.application.name = dubbo-provider
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880
## RegistryConfig Bean
dubbo.registry.id = my-registry
# zookeeper的地址(换成自己的)
dubbo.registry.address = zookeeper://xxx:2181


HelloService的实现类,注意这里要用dubbo的service注解,不是spring的。


package com.FarStars.springbootdubboprovider.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.FarStars.springbootdubboapi.service.HelloService;
/**
 * @author FarStars
 * @date 2018/9/13
 */
@Service(
        version = "${provider.service.version}",
        application = "${dubbo.application.id}",
        protocol = "${dubbo.protocol.id}",
        registry = "${dubbo.registry.id}"
)
public class HelloServiceImpl implements HelloService {
    /**
     * sayHello
     *
     * @param name name
     * @return java.lang.String
     * @author FarStars
     */
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}


consumer的application.properties配置文件:


# Spring boot application
spring.application.name = spring-boot-dubbo-consumer
server.port = 8080
management.port = 8081
# Service Version
consumer.service.version = 1.0.0
# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-consumer
dubbo.application.name = dubbo-consumer
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880


HelloController类:


package com.FarStars.springbootdubboconsumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.FarStars.springbootdubboapi.service.HelloService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author FarStars
 * @date 2018/9/13
 */
@RestController
public class HelloController {
    @Reference(
            version = "${consumer.service.version}",
            application = "${dubbo.application.id}",
            url = "dubbo://localhost:20880"
    )
    private HelloService helloService;
    @RequestMapping("/sayHello")
    public String sayHello(@RequestParam String name) {
        return helloService.sayHello(name);
    }
}


启动类上要加controller包扫描


@SpringBootApplication(scanBasePackages =     
    "com.FarStars.springbootdubboconsumer.controller")


这样就算搭建完成了,测试时先启动provider,再启动consumer。

示例 Controller : http://localhost:8080/sayHello?name=FarStars  网页输出如下,表示服务发布成功


20180913161531718.png


本文参考:dubbo官网:http://dubbo.apache.org/zh-cn/index.html

starter中文文档:https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md

也可以引入actuator包检查健康状态,请参考以上文档。

(本人才疏学浅,如有错误纯属正常,欢迎指出!)

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
6月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
4月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
|
5月前
|
存储 负载均衡 监控
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
这篇文章是关于Apache Dubbo框架与Zookeeper的关系,以及如何下载、安装和启动Zookeeper的教程,包括解决启动过程中可能遇到的报错问题。
211 3
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
|
5月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
172 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
5月前
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
64 4
|
5月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
407 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
Dubbo 关系型数据库 Java
SpringBoot 整合 Dubbo&amp;Zookeeper 实现分布式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36367789/article/details/81665692 1. 安装 Zookeeper 环境 Zookeeper 环境搭建&zk命令详解 2. 服务提供者 因为用了父工程的版本管理,所以这里没有显示版本,我把用到的版本给大家分享下。
2271 0
|
Dubbo 关系型数据库 Java
SpringBoot 整合 Dubbo&Zookeeper 实现分布式
1. 安装 Zookeeper 环境 Zookeeper 环境搭建&zk命令详解 2. 服务提供者 因为用了父工程的版本管理,所以这里没有显示版本,我把用到的版本给大家分享下。
2057 0
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
|
2月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!

热门文章

最新文章