您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringBoot with Apache Dubbo工程的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
該工程示例使用最新的Dubbo版本,Dubbo Starter以及SpringBoot版本,通過Gradle
進行工程管理和構(gòu)建,輸出可執(zhí)行程序。
Dubbo
版本org.apache.dubbo:dubbo:2.7.1
org.apache.dubbo:dubbo-spring-boot-starter:2.7.1
SpringBoot
版本org.springframework.boot:spring-boot-dependencies:2.1.1.RELEASE
根工程(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ù)的提供端
代碼倉庫:https://github.com/broncho/dubbo-case
項目目錄結(jié)構(gòu)
備注:script目錄歸檔執(zhí)行腳本模版信息
public interface HelloService { String sayHello(String name); }
接口實現(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
服務(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
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)一管理。
gradle -DactiveProfile=prod clean distZip
基于SpringBoot的dubbo-server
和dubbo-client
工程會輸出發(fā)布包到各自工程目錄的build/distributions
目錄。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“SpringBoot with Apache Dubbo工程的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(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)容。