SpringBoot+Dubbo整合入门Demo


dubbo是阿里的一个开源分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。在实际应用场景中,可以将主要的业务分离出单独的服务,提供给消费方调用。
本demo在 idea编辑器下,使用maven进行jar包管理

一.安装zookeeper

zookeeper安装-linux环境下
可参考文章:https://blog.csdn.net/weixin_33805152/article/details/87916409

二.新建project工程环境

  • 在idea编辑下,创建默认maven工程(不用勾选任何archetype)
    创建默认maven工程
  • 填写工程相关信息,此处大家自定义即可
    填写工程相关信息

三.在project下创建module

  • 创建module
    在工程下创建module
  • module为默认maven工程(不用勾选任何archetype)
    创建默认maven工程
  • 重复以上步骤三次,构建三个module,此处我分别命名为data-api,data-consumer,data-provider
    工程目录
  • 这里解释一下三个module的主要功能:
    1. data-consumer:消费者,为外部暴露接口,可理解为三层架构中的controller层逻辑。
    2. data-provider:提供者,多为业务逻辑代码,可理解为三层架构中的service和dao层逻辑。
    3. data-api:为data-consumer和data-provider提供公共接口和一些通用工具类。
      以上三个module可以按照不同功能创建更多模块,比如商城的用户管理,订单管理等可以单开一个module,这里为最简单的分布式demo。

四.引入springboot和dubbo

  • 打开母工程的pom文件
    母工程目录下的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.xjb</groupId>
    <artifactId>spingbootdemo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>data-api</module>
        <module>data-provider</module>
        <module>data-consumer</module>
    </modules>
    <!--springboot依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <properties>
        <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
    </properties>
    <dependencies>
        <!--dubbo依赖-->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

五.编写data-api下编写接口层代码

  • 构建以下包结构,包名可自定义
  • 编写UserService接口代码
public interface UserService {
    public String sayHello(String name);
}

六.编写data-provider下编写实现类代码

  • 首先在data-provider目录下的pom中引入data-api
 <dependencies>
        <dependency>
            <groupId>com.xjb</groupId>
            <artifactId>data-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
  • 构建以下包结构,包名可自定义
  • 编写api里UserService的实现类UserServiceImpl
    注意此处@Service注解需要引入dubbo包而不是spring下的包,作用为暴露服务
import com.alibaba.dubbo.config.annotation.Service;
import com.xjb.data.api.service.UserService;

@Service(version = "1.0.0")
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello(String name) {
        return "您好,"+name+"!";
    }
}
  • 编写SpringBoot启动类ProviderApplication
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class);
    }
}
  • 在resources目录下新建两个properties文件
    新建两个properties文件
  • 编写application.properties文件
#应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。
server.contextPath=/provider
#应用端口
server.port=33336
#加载配置文件
spring.profiles.active=dev
  • 编写application-dev.properties文件
#dubbo
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://192.168.75.134:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.xjb.data.provider.service

七.编写data-consumer下接口层代码

  • 首先在data-provider目录下的pom中引入data-api
 <dependencies>
        <dependency>
            <groupId>com.xjb</groupId>
            <artifactId>data-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
  • 构建以下包结构,包名可自定义
    data-consumer包目录
  • 编写UserController
    @Reference注解为与provider的@Service相对应,此处@Reference为调用服务
@RestController
@RequestMapping(value = "/user")
public class UserController {

    @Reference(version = "1.0.0")
    UserService userService;

    @RequestMapping(value = "/sayHello")
    public String sayHello(@RequestParam(defaultValue = "xjb") String name){
        return userService.sayHello(name);
    }
}
  • 编写SpringBoot启动类ConsumerApplication
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }
}

  • 在resources目录下新建两个properties文件
    data-consumer配置文件
  • 编写application.properties文件
#应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。
server.contextPath=/consumer
#应用端口
server.port=33335
#加载配置文件
spring.profiles.active=dev
  • 编写application-dev.properties文件
#dubbo
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://192.168.75.134:2181
spring.dubbo.scan=com.xjb.data.consumer.contoller

八.启动

1.启动data-provider的ProviderApplication,直接右键run即可
2.启动data-consumer的ConsumerApplication,直接右键run即可
3.打开浏览器输入http://localhost:33335/consumer/user/sayHello?name=SpringBoot测试
测试成功

源码地址:https://github.com/JiBinXiao/springboot-all

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐