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

简介: 下图是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包检查健康状态,请参考以上文档。

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

目录
相关文章
|
4月前
|
JavaScript Java 关系型数据库
基于springboot的美食城服务管理系统
本系统基于Spring Boot、Java、Vue和MySQL技术,构建集消费者服务、商家管理与后台监管于一体的美食城综合管理平台,提升运营效率与用户体验。
|
7月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
707 0
|
11月前
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
8022 7
|
9月前
|
Java 开发者 索引
Netty基础—6.Netty实现RPC服务
本文详细介绍了RPC(远程过程调用)的相关概念及其实现细节,涵盖动态代理、Netty客户端和服务端处理、编码解码器以及超时功能的实现。
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
344 3
|
Dubbo Java 应用服务中间件
SpringBoot——SpringBoot集成Dubbo
SpringBoot——SpringBoot集成Dubbo
1759 0
SpringBoot——SpringBoot集成Dubbo
|
Dubbo Java 应用服务中间件
springboot 集成dubbo
springboot 集成dubbo
springboot 集成dubbo

热门文章

最新文章