(面試官問我微服務與naocs的使用我回答了如下,面試官讓我回去等通知)微服務拆分與nacos的配置使用

微服務架構

正常的小項目就是所有的功能集成在一個模塊中,這樣代碼之間不僅非常耦合,而且修改處理的時候也非常的麻煩,應對高并發時也不好處理,所以 我們可以使用微服務架構,對項目進行模塊之間的拆分,每一個微服務負責一部分的業務功能,處理也比較方便。

springcolud 集成了微服務的很多組件,可以達到我們對微服務的使用

微服務拆分原則

我們對項目拆分是有原則的,比如一個小項目,我們前期可以先寫出來,然后后期慢慢拆分,但是如果是大項目剛開始就設計好了微服務,那么我們就可以在項目開始進行微服務的拆分

微服務拆分的時候各個模塊需要 高內聚,低耦合??

拆分方法

拆分的時候 可以 使用完全解耦的拆分,就是每個微服務項目都是一個獨立的工程,項目完全解耦,但是管理比較麻煩

還可以使用maven聚合的拆分,維護方便,但是服務之間耦合,編譯比較耗時

maven聚合形式如何拆分? 就是把不同功能模塊的代碼抽取到一個新模塊中去 例如如下情況

服務之間調用

假如說 我們現在有一個購物車接口,訪問路徑是 /cart/search ,那么我們微服務之間進行調用,就可以 在調用方配置resttemplate 配置,然后進行遠程調用

具體代碼實現如下

package com.hmall.cart.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RemoteCallConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

private void handleCartItems(List<CartVO> vos) {// TODO 1.獲取商品idSet<Long> itemIds = vos.stream().map(CartVO::getItemId).collect(Collectors.toSet());// 2.查詢商品// List<ItemDTO> items = itemService.queryItemByIds(itemIds);// 2.1.利用RestTemplate發起http請求,得到http的響應ResponseEntity<List<ItemDTO>> response = restTemplate.exchange("http://localhost:8081/items?ids={ids}",HttpMethod.GET,null,new ParameterizedTypeReference<List<ItemDTO>>() {},Map.of("ids", CollUtil.join(itemIds, ",")));// 2.2.解析響應if(!response.getStatusCode().is2xxSuccessful()){// 查詢失敗,直接結束return;}List<ItemDTO> items = response.getBody();if (CollUtils.isEmpty(items)) {return;}// 3.轉為 id 到 item的mapMap<Long, ItemDTO> itemMap = items.stream().collect(Collectors.toMap(ItemDTO::getId, Function.identity()));// 4.寫入vofor (CartVO v : vos) {ItemDTO item = itemMap.get(v.getItemId());if (item == null) {continue;}v.setNewPrice(item.getPrice());v.setStatus(item.getStatus());v.setStock(item.getStock());}
}

但是你每次這樣調用 都要寫一遍,這是不是顯的太過冗余,太過麻煩,所以我們引用了接下來的組件 nacos

nacos

nacos是alibaba的一個組件,具體的下載配置流程就不再贅述,

下面我們進行一個場景的分析,現在有一個購物車服務 cartservice ,然后還有一個商品服務 itemservice,我們是查看購物車的時候需要訪問商品服務,當我們的用戶一多,并發量上來的時候商品服務這個 模塊有可能就會承受不住崩潰,所以我們可以多開幾個啟動實例,進行負載均衡的配置,可是當我們訪問的這幾個不同的實例的時候,我們該怎么訪問這些實例呢?

于是就有了nacos

nacos注冊中心原理

當我們配置好nacos之后,我們的實例的端口號 就會發送給nacos注冊中心 ,當我們服務的調用者進行調用的時候,具體的服務端口號就從nacos中進行拉取。但是當我們注冊到幾個實例到nacos中,假如有一些實例變更了,上傳錯誤怎么辦,nacos會有一個心跳檢測,服務會定期像nacos中發送自己狀態也就是心跳請求證明自己健康,當nacos長時間收不到服務提供者的心跳的時候,會認為該實例宕機,從實例列表中剔除,而服務列表變更,nacos主動通知服務調用著,更新本地服務列表

nacos使用

我們下載好nacos之后,在數據庫配置好nacos的對應數據表,在nacos的custom.env文件中配置好自己ip地址,然后訪問http://xxxxxx:8848/nacos/? 這個xxx如果是虛擬機填虛擬機的ip如果是本機就填本機ip就可以。

然后就會有如下頁面

然后我們在商品服務 itemservice中引入pom依賴

<!--nacos 服務注冊發現-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在商品服務的yml文件中配置

spring:application:name: item-service # 服務名稱cloud:nacos:server-addr:xxxxx:8848 # nacos地址

xxxx為IP地址,

然后我們拷貝多個實例

點擊復制,然后?

配置好不同的端口,啟動實例,就可以在nacos中看到服務上傳的實例

服務發現

而我們想調用上傳的服務,也就是說購物車服務調用商品服務上傳的實例

我們需要在購物車服務配置服務發現在購物車服務中yml文件中添加

spring:cloud:nacos:server-addr: xxx:8848

引入依賴

<!--nacos 服務注冊發現-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

這個配置好,也就是說購物車服務也會被注冊為nacos服務,既可以被調用,也可以被調用

我們在service注冊該bean ,然后使用如下方法調用

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

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

相關文章

前端傳參數后端變量類型能夠接受到List卻無法接收到值

問題描述 今天寫了個接口&#xff0c;下圖所示 ReqVO里是這樣的&#xff1a; 然后前端去請求&#xff0c;從請求結果中看發現這里值是在的&#xff08;有經驗的可能就看出來了otherInfo.id: 這樣以參數后端是接收不到的&#xff0c;但是當時沒發現&#xff09; 傳進來后端…

維納運動的概念

維納運動&#xff08;Wiener Process&#xff09;&#xff0c;也稱為標準布朗運動&#xff0c;是一種重要的隨機過程&#xff0c;廣泛應用于數學、物理學和金融學等領域。它是一個連續時間的隨機過程&#xff0c;具有一些特殊的性質&#xff0c;使其成為描述隨機動態系統的經典…

GAT1399協議分析(8)--批量圖像查詢

一、請求消息定義 視頻圖像包含視頻片段、 圖像、 文件、 人員、 人臉、 機動車、 非機動車、 物品、 場景和視頻案事件、 視頻圖像標簽等對象 在消息體中,可以包含其中一種類,加上Data字段即可。 ImageInfo對象 二、請求消息實例 wireshark 抓包實例 請求: 文本化: /V…

制造執行MES系統在光伏行業的應用

全球對可再生能源的需求不斷增長&#xff0c;光伏能源作為一種清潔、可持續的能源形式&#xff0c;已經在廣泛應用中受到了廣泛關注。為滿足工業領域的光伏能源需求&#xff0c;光伏制造執行系統(MES)作為一種集成化的技術解決方案&#xff0c;提供了更高效、更可靠的解決方案。…

WPS的JSA算國產編程語言,IDE,腳本工具嗎?javascript代替VBA

現在wps用javascript代替VBA&#xff0c;應該算很成功了吧。 如果可以獨立出來變成一個腳本語言&#xff0c;簡單的IDE(本身也有類似VBA&#xff0c;不要寄宿在WPS里面運行&#xff0c;這樣就可以變成VBS一樣執行腳本了&#xff0c;用來開發按鍵精靈,LUA一樣的腳本很不錯 以下…

Activity->Activity中動態添加Fragment->Fragment回退棧BackStack

Fragment回退棧 Fragment回退棧用于管理Fragment的導航歷史(添加、刪除、替換)。每個Activity都有一個包含其所有Fragment的FragmentManager&#xff0c;調用其addToBackStack方法時&#xff0c;這個事務就會被添加到FragmentManager的回退棧中當用戶按下返回鍵時&#xff0c;…

MySQL報ERROR 2002 (HY000)解決

今天在連接客戶服務器時MySQL的時候報: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql/mysql.sock’ (2) [rootXXX ~]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket…

rman恢復后,少部分數據文件狀態為MISSING000**

客戶有套一體機&#xff0c;每天晚上21點開始做rman完全備份&#xff0c;大約第2天上午9點多完成備份&#xff0c;rman備份保留策略保留一份完全備份 6月1日晚21點自動發起備份&#xff0c;6月2日上午10點15分完成備份&#xff0c;并生成了一個控制文件備份 c-4063271871-2024…

前端圖片在切換暗黑模式時太亮該怎么辦?

通過css中的filter屬性來實現&#xff0c;進行圖片的色系反轉、亮度、對比度調整等 1、invert 反轉輸入圖像&#xff0c;值為 100% 則圖像完全反轉&#xff0c;值為 0% 則圖像無變化 filter: invert(1); 2、blur 給元素應用高斯模糊效果。 filter: blur(5px); 3、brightnes…

如何解決網絡問題?

組織和 IT 管理員盡其所能完善他們的網絡&#xff0c;但是&#xff0c;不同程度的網絡問題仍然可能出現&#xff0c;這些網絡問題需要立即響應和解決&#xff0c;如果這些問題在不合理的時間內得不到解決&#xff0c;網絡和組織的損害可能會付出高昂的代價。這就是為什么 IT 管…

【漏洞復現】銳捷校園網自助服務系統 login_judge.jsf 任意文件讀取漏洞(XVE-2024-2116)

0x01 產品簡介 銳捷校園網自助服務系統是銳捷網絡推出的一款面向學校和校園網絡管理的解決方案。該系統旨在提供便捷的網絡自助服務&#xff0c;使學生、教職員工和網絡管理員能夠更好地管理和利用校園網絡資源。 0x02 漏洞概述 校園網自助服務系統/selfservice/selfservice…

css移動端開發

1.視口 視口標簽 視口元標簽&#xff08;Viewport Meta Tag&#xff09;用于控制網頁在移動設備上的視口行為&#xff0c;確保頁面能夠正確縮放和調整。通常在HTML的<head>部分添加如下代碼&#xff1a; <meta name"viewport" content"widthdevice-…

《大道平淵》· 玖 —— 把高深的道理講的通俗,這是一門藝術。

《平淵》 玖 "化繁為簡, 點石成金。" 把高深的道理講得通俗&#xff0c;這是一門藝術&#xff01; 講述者能夠站在群眾的角度&#xff0c;用盡可能簡單通俗的語言來解釋復雜的概念。 講述者需要對概念有深刻的理解&#xff0c;還要有靈活的表達能力。 群眾愿意接受…

從當當網批量獲取圖書信息

爬取當當網圖書數據并保存到本地&#xff0c;使用request、lxml的etree模塊、pandas保存數據為excel到本地。 爬取網頁的url為&#xff1a; http://search.dangdang.com/?key{}&actinput&page_index{} 其中key為搜索關鍵字&#xff0c;page_index為頁碼。 爬取的數據…

15- Redis 中的 整數集合 數據結構

整數集合是 Set 對象的底層實現之一。當一個 Set 對象只包含整數值元素&#xff0c;并且元素數量不大時&#xff0c;就會使用整數集合這個數據結構作為底層實現。 1. 整數集合結構設計 整數集合本質上是一塊連續內存空間&#xff0c;它的結構定義如下&#xff1a; typedef s…

Chrome DevTools 使用攻略

Chrome DevTools是谷歌瀏覽器提供的一套強大的開發工具&#xff0c;對于前端開發人員來說是不可或缺的利器。下面將從多個方面介紹Chrome DevTools的使用攻略&#xff1a; 一、啟動方式 通過快捷鍵&#xff1a; 在Windows/Linux上&#xff0c;按下 F12、Ctrl Shift I 或 C…

集成學習筆記

集成學習 簡介 決策樹 GBDT 擬合殘差 一般 GBDT XGBOOST 弓 1 能表達樣本落入的子節點&#xff0c;但是不能把表示結構 2 3.正則項 – 懲罰 防止過擬合&#xff0c;比如一個值總共有10顆樹都是由同一顆樹決定的&#xff0c;過擬合 5 找到一種方式不依賴于損失函數 …

Android開發之內訪Sqlite數據庫(六)

文章目錄 1. Android開發之外訪Sqlite數據庫1.1 Sqlite數據庫的優點1.2 Sqlite接口簡介接口中的抽象方法接口中的實例方法接口的構造方法示例步驟例子 —— 實現增刪改查 1. Android開發之外訪Sqlite數據庫 SQLite是一個軟件庫&#xff0c;實現了自給自足的、無服務器的、零配…

python的優勢有哪些?

python的優點很多&#xff0c;下面簡單地列舉一些&#xff1a; 簡單 Python的語法非常優雅&#xff0c;甚至沒有像其他語言的大括號&#xff0c;分號等特殊符號&#xff0c;代表了一種極簡主義的設計思想。閱讀Python程序像是在讀英語。 易學 Python入手非常快&#xff0c;學習…

K8s:無狀態

無狀態服務 無狀態服務是指服務的實例之間沒有持久化狀態&#xff0c;每個實例都是相同的&#xff0c;可以互換使用。 調度器 ReplicationController 簡稱 RC是 Kubernetes 早期版本中用來確保 Pod 副本始終運行的 API 對象。它通過監控 Pod 副本的數量&#xff0c;確保任何…