springboot簡(jiǎn)單整合dubbo的小demo(基于yml配置)

順便學(xué)習(xí)一下springboot如何搭建分模塊項(xiàng)目

創(chuàng)建分模塊springboot

  1. 先創(chuàng)建一個(gè)springboot的空項(xiàng)目然后刪除無關(guān)文件


    image.png
  2. 修改pom文件,引入所需依賴(dubbo,zkclient)
<?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.xun</groupId>
    <artifactId>dubbo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging><!--設(shè)置打包方式為pom-->

    <name>dubbo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/>
    </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>

    <!-- 1.模塊管理 -->
    <modules>
        <module>provider</module>
        <module>consumer</module>
    </modules>

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

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

        <!-- 2.引入dubbo和zookeeper依賴 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  1. 然后創(chuàng)建模塊


    image.png

    創(chuàng)建之后項(xiàng)目結(jié)構(gòu)如圖:


    image.png
  2. 至此,我們的分模塊項(xiàng)目已經(jīng)基本創(chuàng)建完成

各個(gè)模塊之間的依賴關(guān)系

  1. 接下來說下各個(gè)模塊之間的依賴關(guān)系
    consumer --> provider
    consumer 和 provier 又同時(shí)依賴于父pom【dubbo】
  2. ok理清依賴關(guān)系開始配置我們的各個(gè)模塊

依賴配置

  1. 最外層pom.xml作為我們所有模塊的父pom打包方式要是pom類型,上邊配置中已經(jīng)說明
  2. 配置provider模塊,需要繼承父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.xun</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>provider</name>
    <description>Demo project for Spring Boot</description>

    <!-- 1.繼承父類pom -->
    <parent>
        <groupId>com.xun</groupId>
        <artifactId>dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

</project>
  1. 配置consumer模塊,需要繼承父pom并且要引入provider依賴
<?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.xun</groupId>
    <artifactId>consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>consumer</name>
    <description>Demo project for Spring Boot</description>

    <!-- 1.繼承父pom -->
    <parent>
        <groupId>com.xun</groupId>
        <artifactId>dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <!-- 2.引入服務(wù)接口依賴 -->
        <dependency>
            <groupId>com.xun</groupId>
            <artifactId>provider</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>
  1. ok依賴配置完成,接下來就開始擼代碼了

配置dubbo配置

  1. provider模塊dubbo配置
server:
  port: 8081

dubbo:
#應(yīng)用配置,用于配置當(dāng)前應(yīng)用信息,不管該應(yīng)用是提供者還是消費(fèi)者
  application:
    name: provider
#注冊(cè)中心配置,用于配置連接注冊(cè)中心相關(guān)信息
  registry:
    address: zookeeper://39.106.149.250:2182
#協(xié)議配置,用于配置提供服務(wù)的協(xié)議信息,協(xié)議由提供方指定,消費(fèi)方被動(dòng)接受
  protocol:
    name: dubbo
    port: 20880
#掃描包
  scan:
    base-packages: com.xun.provider.service
  1. consumer模塊dubbo配置
server:
  port: 8082

dubbo:
  application:
    name: consumer
  registry:
    address: zookeeper://39.106.149.250:2182
  protocol:
    name: dubbo
    port: 20880

業(yè)務(wù)代碼層

  1. 需要在程序入口的main方法添加@EnableDubbo注解開啟dubbo
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}
  1. 服務(wù)接口編寫
    在provider模塊下創(chuàng)建service包并編寫接口代碼
    這里只提供接口實(shí)現(xiàn)類了
    注意@Service注解要導(dǎo)入alibaba的包
package com.xun.provider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.xun.provider.service.UserService;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public String getUser() {
        return "你好,DUBBO";
    }
}
  1. 消費(fèi)者業(yè)務(wù)代碼編寫
    在consumer模塊下創(chuàng)建controller包并編寫接口代碼
    注意這是使用@Reference注入
package com.xun.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.xun.provider.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

   @Reference
   private UserService userService;

    @GetMapping("/getUser")
    public String getUser(){
        return userService.getUser();
    }
}
  1. 編譯


    image.png

    注意順序是 1.dubbo 2.provider 3.consumer

運(yùn)行測(cè)試

  1. 項(xiàng)目啟動(dòng)要首先啟動(dòng)服務(wù)再啟動(dòng)消費(fèi)者
  2. 項(xiàng)目啟動(dòng)成功訪問測(cè)試


    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容