日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring Boot 整合 Apache Dubbo的示例代碼

瀏覽:53日期:2023-07-04 15:58:14

Apache Dubbo是一款高性能、輕量級的開源 Java RPC 框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。

注意,是 Apache Dubbo,不再是 Alibaba Dubbo。簡單來說就是 Alibaba 將 Dubbo 移交給 Apache 開源社區進行維護。參見 dubbo-spring-boot-project

Spring Boot 系列:整合 Alibaba Dubbo

一、本文示例說明

1.1 框架版本Dubbo 版本

<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.5</version></dependency>

Spring Boot 版本

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> <relativePath/></parent>

1.2 模塊關系

根工程 order:管理工程信息; 子工程 order-api:定義RPC服務的接口、參數以及響應結果的結果集; 子工程 order-provider:RPC服務的提供端; 子工程 order-consumer:RPC服務的消費端,實際開發過程中實際情況是其它服務的調用該訂單RPC服務二、根工程

2.1 創建項目 order

我這里為了和之前老版本的alibaba的dubbo項目區分,文件名取為apache-dubbo-demo,maven 項目名稱為order。

該項目主要作用是定義工程信息、管理整個項目依賴版本等等,所以src目錄不需要。

2.2 pom.xml

根工程中使用了<dependencyManagement>和<dependencies>進行依賴管理。

<dependencyManagement>:聲明全局依賴,當子項目指定引用才會繼承依賴;<dependencies>:聲明全局依賴,子項目直接自動繼承依賴。

<?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> <!-- 父級引用 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version><relativePath/> </parent> <!-- 基本信息 --> <groupId>cn.van.order</groupId> <artifactId>order</artifactId> <version>1.0.0-SNAPSHOT</version> <name>${project.artifactId}</name> <description>Apache Dubbo 根項目</description> <!--配置--> <properties><java.version>1.8</java.version><dubbo.version>2.7.5</dubbo.version><zookeeper.version>3.4.14</zookeeper.version> </properties> <!-- 子項目 --> <modules><module>order-api</module><module>order-provider</module><module>order-consumer</module> </modules> <!--聲明全局依賴(子項目需要顯示的引用才會繼承依賴)--> <dependencyManagement><dependencies> <!-- dubbo-start依賴 --> <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version> </dependency> <!--zookeeper 注冊中心客戶端引入 使用的是curator客戶端 --> <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><version>${dubbo.version}</version><type>pom</type><exclusions> <exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId> </exclusion></exclusions> </dependency></dependencies> </dependencyManagement> <!--聲明全局依賴(子項目不需要顯示的引用,自動繼承依賴)--> <dependencies><!-- spring boot 依賴 --><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> <exclusions><exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId></exclusion> </exclusions></dependency> </dependencies> <!-- 打包插件 --> <build><plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin></plugins> </build></project>三、order-api

3.1 項目依賴

無需更多依賴,所以很簡單。

<?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> <parent><groupId>cn.van.order</groupId><artifactId>order</artifactId><version>1.0.0-SNAPSHOT</version> </parent> <groupId>cn.van.order</groupId> <artifactId>order-api</artifactId> <version>1.0.0-SNAPSHOT</version> <name>${project.artifactId}</name> <description>dubbo公共項目</description> <build><plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin></plugins> </build></project>

3.2 封裝 RPC 結果集先封裝一個返回碼枚舉類ResultCodeEnum.java

public enum ResultCodeEnum { /*** 通用部分 100 - 599***/ // 成功請求 SUCCESS(200, 'successful'),/*** 這里可以根據不同模塊用不同的區級分開錯誤碼,例如: ***/ // 1000~1999 區間表示用戶模塊錯誤 // 2000~2999 區間表示訂單模塊錯誤 // 3000~3999 區間表示商品模塊錯誤 // 。。。 ORDER_NOT_FOUND(2000, 'order not found'), ; /** * 響應狀態碼 */ private Integer code; /** * 響應信息 */ private String message; ResultCodeEnum(Integer code, String msg) {this.code = code;this.message = msg; } public Integer getCode() {return code; } public String getMessage() {return message; } public void setMessage(String message) {this.message = message; }}

先封裝一個RPC 響應結果集RpcResult.java

public class RpcResult <T> implements Serializable { /** * 是否響應成功 */ private Boolean success; /** * 響應狀態碼 */ private Integer code; /** * 響應數據 */ private T data; /** * 錯誤信息 */ private String message; // 構造器開始 /** * 無參構造器(構造器私有,外部不可以直接創建) */ private RpcResult() {this.code = 200;this.success = true; } /** * 有參構造器 * @param obj */ private RpcResult(T obj) {this.code = 200;this.data = obj;this.success = true; } /** * 有參構造器 * @param resultCode */ private RpcResult(ResultCodeEnum resultCode) {this.success = false;this.code = resultCode.getCode();this.message = resultCode.getMessage(); } // 構造器結束 /** * 通用返回成功(沒有返回結果) * @param <T> * @return */ public static<T> RpcResult<T> success(){return new RpcResult(); } /** * 返回成功(有返回結果) * @param data * @param <T> * @return */ public static<T> RpcResult<T> success(T data){return new RpcResult<T>(data); } /** * 通用返回失敗 * @param resultCode * @param <T> * @return */ public static<T> RpcResult<T> failure(ResultCodeEnum resultCode){return new RpcResult<T>(resultCode); } public Boolean getSuccess() {return success; } public void setSuccess(Boolean success) {this.success = success; } public Integer getCode() {return code; } public void setCode(Integer code) {this.code = code; } public T getData() {return data; } public void setData(T data) {this.data = data; } public String getMessage() {return message; } public void setMessage(String message) {this.message = message; } @Override public String toString() {return 'RpcResult{' +'success=' + success +', code=' + code +', data=' + data +', message=’' + message + ’’’ +’}’; }}

3.3 編寫一個 RPC 接口

public interface OrderDubboService { RpcResult<OrderDomain> getOrder();}

實體OrderDomain.java挺簡單的,詳見 Github 倉庫。

四、order-provider

此子項目是一個服務類項目,也就是將接口服務注冊到zookeeper注冊中心供消費端調取使用。

4.1 項目依賴

<?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> <parent><groupId>cn.van.order</groupId><artifactId>order</artifactId><version>1.0.0-SNAPSHOT</version> </parent> <groupId>cn.van.order</groupId> <artifactId>order-provider</artifactId> <version>1.0-SNAPSHOT</version> <name>${project.artifactId}</name> <description>Dubbo 服務提供者</description> <dependencies><dependency> <groupId>cn.van.order</groupId> <artifactId>order-api</artifactId> <version>1.0.0-SNAPSHOT</version></dependency><dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- zookeeper依賴 --><dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> <exclusions><exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId></exclusion> </exclusions></dependency> </dependencies> <build><plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin></plugins> </build></project>

4.2 服務實現接口

@Servicepublic class OrderDubboServiceImpl implements OrderDubboService {@Override public RpcResult<OrderDomain> getOrder() {return RpcResult.success(new OrderDomain(1, 10086, LocalDateTime.now())); }}

注意:@Service 是 dubbo 包下面的注解不是 Spring 里面的注解。

4.3 項目配置

dubbo 的配置直接用 dubbo,不再以 Spring 開頭; base-packages:指定接口實現所在路徑。

server: # 服務端口 port: 7777spring: application: name: order-provider# dubbo 相關配置(dubbo 的配置不再以 Spring 開頭)dubbo: application: # 應用名稱 name: order-provider scan: # 接口實現者(服務實現)包 base-packages: cn.van.order.service.impl # 注冊中心信息 registry: address: zookeeper://127.0.0.1:2181 protocol: # 協議名稱 name: dubbo # 協議端口 port: 20880五、order-consumer

此子項目就是一個消費項目,比如商品模塊、財務模塊等等。

5.1 項目依賴

<?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> <parent><groupId>cn.van.order</groupId><artifactId>order</artifactId><version>1.0.0-SNAPSHOT</version> </parent> <groupId>cn.van.order</groupId> <artifactId>order-consumer</artifactId> <version>1.0-SNAPSHOT</version> <name>${project.artifactId}</name> <description>Dubbo 消費者</description> <dependencies><dependency> <groupId>cn.van.order</groupId> <artifactId>order-api</artifactId> <version>1.0.0-SNAPSHOT</version></dependency><!-- web項目依賴 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><!-- dubbo依賴 --><dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- dubbo的zookeeper依賴 --><dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> <exclusions><exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId></exclusion> </exclusions></dependency> </dependencies> <build><plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin></plugins> </build></project>

5.2 測試接口

模擬一個接口獲取訂單詳情。

@RestController@RequestMapping('/order')public class OrderConsumerController { @Reference OrderDubboService orderDubboService; @GetMapping('getOrder') public RpcResult getOrder() {return orderDubboService.getOrder(); }}

注意:@Reference引入的是 Dubbo 接口,所以是 Dubbo 的注解。

5.3 配置文件

server: port: 7000spring: application: name: order-consumer# dubbo 相關配置dubbo: application: name: order-consumer registry: address: zookeeper://127.0.0.1:2181六、測試

一切就緒,如果在order-consumer 的測試接口能成功請求到數據,則證明 Dubbo 服務搭建成功。

6.1 啟動 zookeeper

我們選用zookeeper作為注冊中心,因此啟動項目之前需要先啟動它。

6.2 dubbo-admin

dubbo-admin 便于觀察 order-provider 是否成功將接口注冊,具體安裝步驟詳見apache/dubbo-admin

默認端口:8080。

6.3 啟動 dubbo-provider

成功啟動后可以在dubbo-admin:已經成功將接口 OrderService 注冊到 zookeeper 上如下:

Spring Boot 整合 Apache Dubbo的示例代碼

成功將借口注冊到注冊中心,說明dubbo-provider 注冊成功。

6.4 啟動 order-cosumer

啟動消費者項目,在瀏覽器請求消費接口:http://localhost:7000/order/getOrder,成功返回數據如下:

{ 'success':true, 'code':200, 'data':{'id':1,'orderNum':10086,'gmtCreate':'2020-05-06T11:59:45.535' }, 'message':null}

成功請求到 order-provider 提供的數據,說明 Dubbo 搭建成功!

七、總結

以上的完整代碼我已上傳到 Github,需要的可以自取測試,歡迎star!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一本一道久久a久久| 国产精品成人国产| 国产精品亚洲综合久久| 亚洲影院天堂中文av色| 女主播福利一区| 人人香蕉久久| 麻豆视频在线观看免费网站黄| 国产调教一区二区三区| 亚洲精品自拍| 欧美在线看片| 久久精品99国产国产精| 久久亚洲影院| 久久都是精品| 日本va欧美va瓶| 久久国产生活片100| 国产精品久久久久久久免费软件| 国产乱子精品一区二区在线观看 | 亚洲精品一级二级| 日韩精品欧美大片| 欧美搞黄网站| 日本一二区不卡| 日韩精品成人在线观看| 国产日本久久| 亚久久调教视频| 国产日韩欧美高清免费| 成人亚洲一区二区| 国产精品社区| 国产剧情一区二区在线观看| 国产精品99在线观看| zzzwww在线看片免费| 色综合视频一区二区三区日韩| 福利精品在线| 日本一区中文字幕| 精品视频高潮| 日本一区二区三区中文字幕| 电影91久久久| 日韩亚洲精品在线观看| 国产一区一一区高清不卡| 五月天av在线| 免费在线欧美视频| 精品视频国产| 蜜臀久久99精品久久久久久9 | 欧美a级片一区| 91福利精品在线观看| av亚洲免费| 久久成人福利| 亚洲一区导航| 国产色播av在线| 日韩av中文字幕一区二区| 欧美极品中文字幕| 尹人成人综合网| 精品视频在线你懂得| 伊人成人在线视频| 岛国av在线网站| 国产精品嫩草影院在线看| 视频福利一区| 国产精品久久乐| 亚洲a级精品| 国产99精品| 日产午夜精品一线二线三线| 久久99伊人| 亚洲成人不卡| 国产精品手机在线播放| 好吊一区二区三区| 国产精品亚洲二区| 久久亚洲二区| 夜久久久久久| 欧美~级网站不卡| 天堂中文av在线资源库| 久久精品国产久精国产爱| 亚洲色图综合| 久久国产福利| 亚洲一区二区三区高清不卡| 国产精品av久久久久久麻豆网| а√天堂8资源中文在线| 国产成人黄色| 国产精品国产三级国产在线观看| 91伊人久久| 日韩av中文字幕一区二区三区| 蜜臀91精品国产高清在线观看| 成人黄色av| 欧美搞黄网站| 蜜芽一区二区三区| 视频一区中文字幕精品| 日本aⅴ精品一区二区三区| 日本v片在线高清不卡在线观看| 一区二区三区国产在线| 日韩精品三级| 久久影视三级福利片| 国产成人精品一区二区三区视频 | 国产精品日本一区二区不卡视频 | 麻豆91小视频| 国产一区2区在线观看| 日韩一区亚洲二区| 99国产精品一区二区| 美日韩精品视频| 国产精选一区| 久久久久蜜桃| 免费视频久久| 欧美日韩一区二区国产| 成人台湾亚洲精品一区二区 | 国产极品嫩模在线观看91精品| 韩国一区二区三区视频| 国产综合精品| 日韩高清电影一区| 欧美aa在线观看| 亚洲色图网站| 裤袜国产欧美精品一区| 黄色日韩在线| 91亚洲国产高清| 亚洲精品动态| 麻豆视频在线看| 老牛国产精品一区的观看方式| 成人在线观看免费视频| 综合激情网站| 播放一区二区| 国产精品极品| 在线观看免费一区二区| 久久精品天堂| 亚洲bt欧美bt精品777| 久久婷婷一区| 久久女人天堂| 欧美亚洲三级| 在线观看一区| 激情五月综合网| 久久影院资源站| 日本少妇一区二区| 免费视频国产一区| 中文在线а√天堂| 蜜桃精品视频| 国产欧美视频在线| 天堂va欧美ⅴa亚洲va一国产| 午夜欧美精品| 免费一二一二在线视频| 国产精品传媒麻豆hd| 日韩精选在线| 日韩精品一区二区三区中文| 亚洲尤物在线| 中文字幕日韩欧美精品高清在线| 亚洲小说欧美另类婷婷| 中文字幕高清在线播放| 日韩综合在线| 久久中文欧美| 国产videos久久| 色欧美自拍视频| 亚洲成av在线| 亚洲性图久久| 亚洲一区二区成人| 亚洲一区二区三区久久久| 蜜桃视频在线观看一区二区| 麻豆91精品| 综合国产精品| 欧美影院精品| 国产videos久久| 在线国产一区| 欧美一区久久| 粉嫩av一区二区三区四区五区 | 成人国产综合| 久久久久久久久99精品大| 欧美精品一二| 亚洲精品高潮| 老司机精品视频网| 日韩精品麻豆| 视频一区欧美精品| 婷婷久久免费视频| 国产成人1区| 亚洲黄色影院| 欧美国产极品| 激情五月综合网| 国产精品夜夜夜| 欧美日韩国产在线观看网站| 欧美日韩1区2区3区| 精精国产xxxx视频在线野外| 亚洲国产影院| 国产日韩亚洲| 好吊一区二区三区| 国产精品3区| 在线精品视频在线观看高清| 国产精品香蕉| 91精品蜜臀一区二区三区在线| 亚洲精品国模| 91精品一区二区三区综合| 日韩极品在线观看| 久久人人88| 国产一区2区在线观看| 亚洲欧美网站在线观看| 欧美香蕉视频| 国产精品宾馆| 日韩国产欧美三级| 久久国产高清| 不卡视频在线| 999国产精品视频| 中文字幕在线官网| 久久这里只有精品一区二区| 免费日韩av| 亚洲大全视频| 亚洲电影在线| 日韩精品一区二区三区免费观看| 开心激情综合| 你懂的网址国产 欧美|