springCloud整合Dubbo案例

前言:

好久沒有使用dubbo了,溫習一下。

一、先搭建一個SpringCloud框架

整體框架如下圖

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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.fan</groupId><artifactId>springclouddubbo</artifactId><version>1.0-SNAPSHOT</version><modules><module>provider</module><module>consumer</module><module>common</module></modules><packaging>pom</packaging><!-- 統一管理jar包版本 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>5.1.47</mysql.version><druid.version>1.1.16</druid.version><mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version></properties><!-- 子模塊繼承之后,提供作用:鎖定版本+子modlue不用寫groupId和version  --><dependencyManagement><dependencies><!--spring boot 2.2.2--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--spring cloud Hoxton.SR1--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><optional>true</optional></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build></project>

注意:剛創建時還沒有?<modules>

2. 子工程 provider

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.2.8.RELEASE</version></dependency></dependencies>
ProviderApplication啟動類:
@SpringBootApplication
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}
}

?3. 子工程 consumer

pom同上,ConsumerApplication啟動類:

@SpringBootApplication
public class ConsumerApplication {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

4. 分別創建對應的controller與service

provider

@Service
public class UserService {public String getUser() {return "user";}
}
@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/user")public String getUser() {return userService.getUser();}
}

consumer

@Service
public class OrderService {// 使用restTemplate,調用服務提供者的Controller方法@Autowiredprivate RestTemplate restTemplate;public String getUser() {String forObject = restTemplate.getForObject("http://localhost:8080/user", String.class);return forObject;}
}
@RestController
public class UserController {@Autowiredprivate OrderService orderService;@GetMapping("/order")public String getUser() {return orderService.getUser();}
}

分別啟動provider、consumer,訪問?http://localhost:8081/order?查看是否成功。

二、改造Dubbo

1.為provider、consumer添加pom依賴

添加dubbo核心依賴、添加要使用的協議的依賴、添加要使用的注冊中心依賴,這里我使用nacos作為注冊中心需要引入倆個依賴。

        <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.0.7</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-rpc-dubbo</artifactId><version>3.0.7</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-zookeeper</artifactId><version>3.0.7</version></dependency>

2.配置dubbo相關的基本信息

?配置application.properties,注意修改consumer對應的name

server.port=8081
dubbo.application.name=provider-application
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dobbo.protocol.host=127.0.0.1
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=8082dubbo.application.name=consumer-application
dubbo.registry.address=zookeeper://127.0.0.1:2181

3. 改造項目

由于dubbo是面向接口的形式,所以我們不在使用?RestTemplate 要替換為對應的服務接口。

(1)修改provider

? ? ? ? 創建userseivce接口

public interface UserService {public String getUser();
}

????????實現該接口

// 可以為Dubbo服務添加對應的版本
@DubboService(version = "1.0")
public class UserServiceImpl implements UserService {public String getUser() {return "user";}
}

@DubboService:SpringBoot將添加該注解的方法發布為Dubbo服務。

由于我們要提供服務接口,所以?provider中的controller已經沒有用了,這里可以刪除了。

(2)創建公共模塊,抽象服務接口

創建公共模塊,common,將provider中的?UserService移動到common中

為provider、consumer添加公共模塊的依賴

        <dependency><groupId>com.fan</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency>

(3)修改consumer

@Service
public class OrderService {@DubboReferenceprivate UserService userService;public String getUser() {return userService.getUser();}
}
  • @DubboReference:注入遠程服務的代理對象。

(4)啟動類開啟@EnableDubbo

@EnableDubbo:用于掃描@DubboService(加在啟動類上,就會掃描啟動類所在包及其子包內的所有@DubboService),并把對應的對象實例化,發布成RPC服務。

@DubboComponentScan:如果需要掃描其他包下的注解使用。

在yml配置文件中,掃描包dubbo.scan.base-packages等同于@EnableDubbo注解

4. 啟動項目

先啟動?provider、再啟動consumer,瀏覽器訪問:http://localhost:8082/order

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/44914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44914.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/44914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發者必讀:獲取電商API的多種渠道

開發電商軟件往往需要對接電商API&#xff0c;電商API可以從哪些渠道獲取&#xff1f;下面給大家介紹兩種獲取渠道。 一、從電商平臺開放平臺獲取電商API 電商平臺的開放平臺是獲取電商API最直接的渠道&#xff0c;但是電商平臺較多&#xff0c;每一個電商平臺都需要單…

Vue3 引入騰訊地圖 包含標注簡易操作

1. 引入騰訊地圖API JavaScript API | 騰訊位置服務 (qq.com) 首先在官網注冊賬號 并正確獲取并配置key后 找到合適的引入方式 本文不涉及版本操作和附加庫 據體引入參數參考如下圖 具體以鏈接中官方參數為準標題 在項目根目錄 index.html 中 寫入如下代碼 <!-- 引入騰…

Socks5代理為什么比HTTP代理快?

在數字化日益深入的時代&#xff0c;網絡安全和隱私保護成為了公眾關注的焦點。為了應對網絡威脅&#xff0c;保護個人隱私和數據安全&#xff0c;代理技術應運而生。在眾多代理協議中&#xff0c;SOCKS5代理和HTTP代理是兩種較為常見的選擇。然而&#xff0c;為何SOCKS5代理在…

網頁設計零基礎入門:前端技術全攻略

在當今互聯網飛速發展的時代&#xff0c;前端網頁設計已經成為一個備受關注的領域。隨著其重要性的不斷提高&#xff0c;越來越多的專業人士和愛好者開始對前端設計感興趣&#xff0c;希望通過掌握這項技術開辟自己的職業道路。然而&#xff0c;對于新手設計師來說&#xff0c;…

ollama + lobechat 搭建自己的多模型助手

背景 人工智能已經推出了快2年了&#xff0c;各種模型和插件&#xff0c;有漸漸變成熟的趨勢&#xff0c;打造一個類似 hao123網站的人工智能模型入口&#xff0c;也變得有需求了。用戶會去比較多個ai給出的答案&#xff0c;作為程序員想擁有一臺自己的GPU服務器來為自己服務。…

如何在vue的項目中導入阿里巴巴圖標庫

阿里巴巴矢量圖標庫官網&#xff1a;iconfont-阿里巴巴矢量圖標庫 選擇你喜歡的圖標&#xff0c;添加入庫 點擊添加至項目&#xff0c;并新建文件夾&#xff0c;點擊確定 選擇font-class&#xff0c;點擊生成代碼 代碼生成后&#xff0c;在網站上打開 全選復制到style 點擊復制…

【TB作品】MSP430F6638單片機,頻率計

基于 MSP430-FFTB6638 實驗箱 頻率測量與通信系統 利用 MCU 定時器模塊相關功能設計實現數字頻率計功能&#xff0c;測量范圍&#xff1a;100~10000Hz&#xff0c; 測量誤差≤1%&#xff0c;測量速度≤1 秒。測量結果本地顯示&#xff08;段式 LCD、字符型 LCD、點陣 LCD &…

springboot系列九: 接收參數相關注解

文章目錄 基本介紹接收參數相關注解應用實例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute 復雜參數基本介紹應用實例 自定義對象參數-自動封裝基本介紹應用實例 基本介紹 1.SpringBoot 接收客戶端提交數據 / 參數會使用到相…

【小白也能看的懂】想要玩轉AI大模型,這4招你得知道

前言 對于大部分人來說&#xff0c;能夠靈活使用AI工具&#xff0c;并對自己每個常用的AI工具優劣勢很清楚&#xff0c;就已經足夠了。不過&#xff0c;畢竟AI發展實在太快&#xff0c;多了解一些相關的知識點&#xff0c;以全局的視角去看AI&#xff0c;可以避免管中窺豹&…

編程語言現狀:深入剖析與未來展望

編程語言現狀&#xff1a;深入剖析與未來展望 在數字化時代的浪潮中&#xff0c;編程語言作為信息科技領域的基石&#xff0c;正經歷著前所未有的變革與發展。本文將從四個方面、五個方面、六個方面和七個方面&#xff0c;深入剖析編程語言的現狀&#xff0c;并展望其未來的發…

【錯題集-編程題】買賣股票的最好時機(四)(動態規劃)

力扣對應題目鏈接&#xff1a;188. 買賣股票的最佳時機 IV - 力扣&#xff08;LeetCode&#xff09; 牛客對應題目鏈接&#xff1a;買賣股票的最好時機(四)_牛客題霸_牛客網 (nowcoder.com) 一、分析題目 1、狀態表示 為了更加清晰的區分買入和賣出&#xff0c;我們換成有股…

【鴻蒙學習筆記】通過用戶首選項實現數據持久化

官方文檔&#xff1a;通過用戶首選項實現數據持久化 目錄標題 使用場景第1步&#xff1a;源碼第2步&#xff1a;啟動模擬器第3步&#xff1a;啟動entry第6步&#xff1a;操作樣例2 使用場景 Preferences會將該數據緩存在內存中&#xff0c;當用戶讀取的時候&#xff0c;能夠快…

springboot對象參數賦值變化

java springboot 項目&#xff0c; 通過接口修改Person類 name值&#xff0c; 在別的類中&#xff0c;注入Person類 Resource Person person&#xff0c; 為什么拿不到 接口修改的 name的值&#xff0c;是Person類 不同的對象造成的 嗎 參數對象和注入對象區別 Person類&…

云WAF | 云waf基礎知識詳解

隨著數字時代的到來&#xff0c;網絡安全問題越來越突出&#xff0c; Web應用防火墻&#xff08;WAF&#xff09;是保障 Web應用安全的一道重要防線。在云計算環境下&#xff0c;云環路由云平臺&#xff08;WAF&#xff09;的出現&#xff0c;其融合了 WAF的能力和云計算的靈活…

【Linux】IP地址與主機名

文章目錄 1.IP地址2.特殊IP地址3.主機名4.域名解析 1.IP地址 每一臺聯網的電腦都會有一個地址&#xff0c;用于和其它計算機進行通訊 IP地址主要有2個版本&#xff0c;V4版本和V6版本 IPv4版本的地址格式是&#xff1a;a.b.c.d,其中abcd表示0~255的數字&#xff0c;如192.168.…

PS 2024【最新】中文白嫖版!,安裝教程,圖文步驟

文章目錄 軟件介紹軟件下載安裝步驟 軟件介紹 Photoshop&#xff0c;簡稱“PS” Adobe Photoshop&#xff0c;簡稱“PS”&#xff0c;是由Adobe Systems開發和發行的圖像處理軟件。Photoshop主要處理以像素所構成的數字圖像。使用其眾多的編修與繪圖工具&#xff0c;可以有效地…

利用AI快速上手新項目:開發者的高效指南

使用AI幫助開發者熟悉新的項目 在現代軟件開發中&#xff0c;開發者經常需要快速熟悉一個新的項目。項目可能包含復雜的結構和大量的文件&#xff0c;這對新手開發者來說無疑是一項挑戰。幸運的是&#xff0c;借助AI技術&#xff0c;我們可以更加高效地了解項目結構&#xff0…

道路運輸企業管理人員安全考核試題(附答案)

1、【多選題】《道路旅客運輸企業安全管理規范》規定&#xff0c;客運企業應當制定車輛動態監控操作規程。操作規程的內容包括( )。(ABCD) A、衛星定位裝置、視頻監控裝置、動態監控平臺設備的檢修和維護要求 B、動態監控信息采集、分析、處理規范和流程 C、違法違規信息統…

探索Facebook在人工智能領域的最新進展

在當今快速發展的科技領域中&#xff0c;人工智能&#xff08;AI&#xff09;作為一項關鍵技術&#xff0c;正在逐步改變著社交媒體的面貌。作為全球最大的社交平臺之一&#xff0c;Facebook積極探索和應用人工智能&#xff0c;以提升用戶體驗、增強平臺安全性并推動技術創新。…

Nodejs 第八十四章(ElasticSearch搜索)

ElasticSearch基本用法在之前的篇章介紹過了 這里不在過多闡述 模擬假數據 安裝庫 faker-js/faker 模擬假數據的一個庫非常好用支持中文使用中文 locale: [zh_CN], 設置即可生成名字&#xff0c;郵箱&#xff0c;手機號&#xff0c;id&#xff0c;年齡&#xff0c;性別生成完成…