溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBoot with Apache Dubbo工程的示例分析

發(fā)布時間:2021-11-22 09:36:54 來源:億速云 閱讀:125 作者:小新 欄目:編程語言

這篇文章主要介紹了SpringBoot with Apache Dubbo工程的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

1. 說明

該工程示例使用最新的Dubbo版本,Dubbo Starter以及SpringBoot版本,通過Gradle進行工程管理和構(gòu)建,輸出可執(zhí)行程序。

2. 框架版本

2.1  Dubbo版本

  • org.apache.dubbo:dubbo:2.7.1

  • org.apache.dubbo:dubbo-spring-boot-starter:2.7.1

2.2 SpringBoot版本

  • org.springframework.boot:spring-boot-dependencies:2.1.1.RELEASE

3. 模塊關(guān)系

  • 根工程(dubbo-case),僅用來定義構(gòu)建任務(wù),工程信息

  • 子工程(dubbo-api) ,定義RPC服務(wù)的接口,參數(shù)和響應(yīng)結(jié)果的數(shù)據(jù)傳輸對象

  • 子工程(dubbo-client), RPC服務(wù)的消費端,實際開發(fā)過程中實際情況是一些服務(wù)調(diào)用其它服務(wù)的RPC服務(wù)

  • 子工程(dubbo-server),RPC服務(wù)的提供端

SpringBoot with Apache Dubbo工程的示例分析

4. 工程詳情

4.1 工程信息

  • 代碼倉庫:https://github.com/broncho/dubbo-case

  • 項目目錄結(jié)構(gòu)

SpringBoot with Apache Dubbo工程的示例分析

備注:script目錄歸檔執(zhí)行腳本模版信息

4.2 接口定義(dubbo-api)

public interface HelloService {

    String sayHello(String name);
}

4.3 服務(wù)提供者(dubbo-server)

  • 接口實現(xiàn)

import com.github.broncho.dubbo.api.HelloService;
import org.apache.dubbo.config.annotation.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * Author: secondriver
 * Created: 2019/8/4
 */
@Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Welcome " + name + " at " + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
    }
}

備注:@Service注解是由Dubbo框架提供的

  • 啟動類

@SpringBootApplication
public class DubboServerApplication {

    public static void main(String[] args) {
        new EmbeddedZooKeeper(2181, true).start();
        SpringApplication.run(DubboServerApplication.class, args);
    }
}

備注:此處使用嵌入式Zookeeper,實現(xiàn)詳情參見源碼;或者可以直接采用獨立Zookeeper服務(wù)

  • 配置文件application.properties

# 應(yīng)用名稱
dubbo.application.name=dubbo-app1

dubbo.application.qosEnable=true
dubbo.application.qosPort= 22222
dubbo.application.qosAcceptForeignIp=true

# 接口實現(xiàn)者(服務(wù)實現(xiàn))包
dubbo.scan.base-packages=com.github.broncho.dubbo.server.impl

# 注冊中心信息
dubbo.registry.id=my-zk
dubbo.registry.address=localhost:2181
dubbo.registry.protocol=zookeeper
dubbo.registry.client=curator

關(guān)于Dubbo的配置參見:https://dubbo.apache.org/zh-cn/docs/user/references/api.html

4.4 服務(wù)消費者(dubbo-client)

  • 服務(wù)消費示例

@Component
public class BusinessComponent {

    @Reference
    private HelloService helloService;

    public void greeting(String name) {
        System.out.println(helloService.sayHello(name));
    }

}
  • 啟動類

@SpringBootApplication
public class DubboClientApplication {

    public static void main(String[] args) {

        ConfigurableApplicationContext context = SpringApplication.run(DubboClientApplication.class, args);

        BusinessComponent component = context.getBean(BusinessComponent.class);

        //RPC
        component.greeting("Dubbo RPC");

    }
}
  • 配置文件(application.properties)

# 應(yīng)用程序名
dubbo.application.name=dubbo-app2

# 注冊中心信息
dubbo.registry.id=my-zk
dubbo.registry.address=localhost:2181
dubbo.registry.protocol=zookeeper
dubbo.registry.client=curator

5. 打包部署

5.1 Gradle配置

  • gradle.properties

systemProp.activeProfile=dev
systemProp.javaVersion=1.8
  • build.gradle

import org.springframework.boot.gradle.plugin.SpringBootPlugin

buildscript {
    repositories {
        mavenLocal()
        maven {
            name "alimaven"
            url "http://maven.aliyun.com/nexus/content/groups/public/"

        }
        mavenCentral()
    }
}

plugins {
    id 'java'
    id 'idea'
    id 'org.springframework.boot' version '2.1.1.RELEASE' apply false
    id 'io.spring.dependency-management' version '1.0.8.RELEASE' apply false
}

//所有工程定義
allprojects {

    sourceCompatibility = System.properties["javaVersion"]
    targetCompatibility = System.properties["javaVersion"]

    repositories {
        mavenLocal()
        maven {
            name "alimaven"
            url "http://maven.aliyun.com/nexus/content/groups/public/"

        }
        mavenCentral()
    }
    group 'com.github.broncho'
    version '1.0.0'
}

//子工程定義
subprojects {
    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'distribution'

    if (!name.contains("api")) {
        apply plugin: 'org.springframework.boot'
        apply plugin: 'application'
    }

    dependencyManagement {
        imports {
            mavenBom(SpringBootPlugin.BOM_COORDINATES)
        }
        dependencies {
            dependencySet(group: 'org.apache.dubbo', version: '2.7.1') {
                entry 'dubbo'
                entry 'dubbo-spring-boot-starter'
            }
        }
        dependencies {
            dependencySet(group: 'org.apache.curator', version: '4.0.0') {
                entry 'curator-framework'
                entry 'curator-recipes'
            }
        }
        dependencies {
            dependency 'org.apache.zookeeper:zookeeper:3.5.5'
        }
    }

    if (!project.name.contains("api")) {

        println "Project ${name}  activeProfile ${System.properties['activeProfile']}"

        jar {
            enabled true
        }

        applicationDefaultJvmArgs = ['-Xms256m', '-Xmx256m']

        /**
         * 生成啟動腳本
         */
        startScripts() {
            doFirst {
                unixStartScriptGenerator.template = resources.text.fromFile(
                        project.getRootDir().getAbsolutePath() + "/script/unixStartScript.txt"
                )
                windowsStartScriptGenerator.template = resources.text.fromFile(
                        project.getRootDir().getAbsolutePath() + "/script/windowsStartScript.txt"

                )
            }
        }

        /**
         * 開發(fā)環(huán)境下不能排除配置文件,不然沒法通過IDE運行項目
         */
        if (!"dev".equals(System.properties['activeProfile'])) {
            proce***esources {
                exclude 'application*.properties'
            }
        }

        /**
         * application*.properties統(tǒng)一復(fù)制到config目錄
         * SpringBoot程序啟動時從config目錄讀取配置文件
         */
        applicationDistribution.from("src/main/resources") {
            include 'application*.properties'
            into 'config'
        }

    }
}

項目采用了Spring Boot Gradle Plugin和dependency-management結(jié)合起來進行SpringBoot版本管理以及子工程中依賴的統(tǒng)一管理。

5.2 打包命令

gradle   -DactiveProfile=prod  clean  distZip

基于SpringBoot的dubbo-serverdubbo-client工程會輸出發(fā)布包到各自工程目錄的build/distributions目錄。

5.3 發(fā)布包格式

SpringBoot with Apache Dubbo工程的示例分析

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“SpringBoot with Apache Dubbo工程的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI