SpringCloud01——項目演變、微服務遠程調用三種方式、springcloud介紹、nacos注冊中心

目錄

一、項目架構演變過程

1、單體應用架構

2、垂直應用架構

3、分布式服務架構

4、流動計算架構(SOA架構)

5、微服務架構

二、如何實現微服務遠程調用

1、HttpClient工具類(springboot中)

形式1:調用第三方的公開服務

形式2:創建兩個微服務,兩個服務之間進行遠程服務調用

2、RestTemplate工具類(springboot中)

3、openFeign組件(springcloud中)

三、微服務架構的實現方式

1、dubbo(都是java語言開發的)

2、springcloud(不限制語言)

四、SpringCloud的簡介

4.1初識SpringCloud

4.2?為什么使用SpringCloud

4.3?SpringCloud相關組件(框架)

五、nacos注冊中心

1、搭建nacos注冊中心

2、注冊微服務到nacos注冊中心


一、項目架構演變過程

1、單體應用架構

當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此

時,用于簡化增刪改查工作量的數據訪問框架(ORM)是關鍵。

適用于小型網站,小型管理系統,將所有功能都部署到一個功能里,簡單易用。

缺點:1、性能擴展比較難 2、協同開發問題 3、不利于升級維護

2、垂直應用架構

當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個

應用,以提升效率。此時,用于加速前端頁面開發的Web框架(MVC)是關鍵。

通過切分業務來實現各個模塊獨立部署降低了維護和部署的難度,團隊各司其職更易管

理,性能擴展也更方便,更有針對性。

缺點:公用模塊無法重復利用,開發性的浪費

3、分布式服務架構

當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務,逐

形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用于提高業務

復用及整合的分布式服務框架是關鍵。

4、流動計算架構(SOA架構)

當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中

心基于訪問壓力實時管理集群容量,提高集群利用率。此時,用于提高機器利用率的資源調

度和治理中心(SOA)[Service Oriented Architecture]是關鍵

5、微服務架構

微服務架構的特點

單一職責:微服務架構中每一個服務(模塊項目)都對應唯一的業務能力,做到單一職責

:微服務的服務拆分粒度很小,例如一個用戶管理就可以作為一個服務。每個服務雖小,但“五臟俱全”。

面向服務:面向服務是說每個服務都要對外暴露Restful風格服務接口API。并不關心服務的

技術實現,做到與平臺和語言無關,也不限定用什么技術實現,只要提供Restful的接口即可。

自治:自治是說服務間互相獨立,互不干擾

  • 團隊獨立:每個服務都是一個獨立的開發團隊,人數不能過多。
  • 技術獨立:因為是面向服務,提供Restfule接口,使用什么技術沒有別人干涉
  • 前后端分離:采用前后端分離開發,提供統一Rest接口,后端不用再為PC、移動段開發不同接口
  • 數據庫分離:每個服務都使用自己的數據源
  • 部署獨立,服務間雖然有調用,但要做到服務重啟不影響其它服務。有利于持續集成和持續交付。每個服務都是獨立的組件,可復用,可替換,降低耦合,易維護

二、如何實現微服務遠程調用

1、HttpClient工具類(springboot中)

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId>
</dependency>

形式1:調用第三方的公開服務

package com.hl.web;
?
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
?
import java.io.IOException;
?
@RestController
public class HelloController {@RequestMapping("/hello")public Object hello() throws IOException {//發起網絡請求,調用百度接口//1、構建一個HttpClient對象CloseableHttpClient client = HttpClientBuilder.create().build();//2、封裝一個httpGet 或者 post請求HttpGet request = new HttpGet("http://www.baidu.com");//3、發起網絡請求,獲取響應對象CloseableHttpResponse response = client.execute(request);//4、解析響應結果Integer code = response.getStatusLine().getStatusCode();System.out.println("響應狀態碼:"+code);HttpEntity entity = response.getEntity();return EntityUtils.toString(entity);}
}

形式2:創建兩個微服務,兩個服務之間進行遠程服務調用

http://localhost:8081/user/info

@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/info")public User info(){return new User(1,"admin");}
}
@RequestMapping("/info")
public Object info() throws IOException {//發起網絡請求,調用百度接口//1、構建一個HttpClient對象CloseableHttpClient client = HttpClientBuilder.create().build();//2、封裝一個httpGet 或者 post請求HttpGet request = new HttpGet("http://localhost:8081/user/info");//3、發起網絡請求,獲取響應對象CloseableHttpResponse response = client.execute(request);//4、解析響應結果Integer code = response.getStatusLine().getStatusCode();System.out.println("響應狀態碼:"+code);HttpEntity entity = response.getEntity();String s = EntityUtils.toString(entity);User user = JSONObject.parseObject(s,User.class);return user;
}

2、RestTemplate工具類(springboot中)

@SpringBootApplication
public class ProjectAApplication {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}
@RestController
public class HelloController {@Autowiredprivate RestTemplate restTemplate;
?@RequestMapping("/getUser")public User getUser(){return restTemplate.getForObject("http://localhost:8081/user/info", User.class);}
}

3、openFeign組件(springcloud中)

三、微服務架構的實現方式

1、dubbo(都是java語言開發的)

有Alibaba研發,后轉給apache維護。

2、springcloud(不限制語言)

spring組織提供的。 http協議遠程調用

四、SpringCloud的簡介

4.1初識SpringCloud

微 服 務 是 一 種 架 構 方 式 , 最 終 肯 定 需 要 技 術 架 構 去 實 施 。
微 服 務 的 實 現 方 式 很 多 , 但 是 最 火 的 莫 過 于 Spring Cloud了 。 為 什 么 ?

  • 后臺硬:作為Spring家族的一員,有整個Spring全家桶靠山,背景十分強大。
  • 技術強:Spring作為Java領域的前輩,可以說是功力深厚。有強力的技術團隊支撐,一般人還真比不了
  • 群眾基礎好:可以說大多數程序員的成長都伴隨著Spring框架,試問:現在有幾家公司開發不用Spring?SpringCloud與Spring的各個框架無縫整合,對大家來說一切都是熟悉的配方,熟悉的味道。
  • 使用方便:相信大家都體會到了SpringBoot給我們開發帶來的便利,而SpringCloud完全支持SpringBoot的開發,用很少的配置就能完成微服務框架的搭建

4.2?為什么使用SpringCloud

  • SpringCloud是Spring旗下的項目之一,官網地址:http://projects.spring.io/spring-cloud/
  • Spring最擅長的就是集成,把世界上最好的框架拿過來,集成到自己的項目中。
  • SpringCloud也是一樣,它將現在非常流行的一些技術整合到一起,實現了諸如:配置管理,服務發現,智能路由,負載均衡,熔斷器,控制總線,集群狀態等等功能。

4.3?SpringCloud相關組件(框架)

  • Eureka:服務治理組件,包含服務注冊中心,服務注冊與發現機制的實現。(服務治理,服務注冊/發現) ,類似的產品還有Consul、Nacos
  • Spring Cloud GateWay:網關組件,提供智能路由,訪問過濾功能 ,類似產品還有Zuul
  • Ribbon:客戶端負載均衡的服務調用組件(客戶端負載均衡)
  • Feign:服務調用,給予Ribbon和Hystrix的聲明式服務調用組件 (聲明式服務調用) (發送Http請求訪問)
  • Hystrix:容錯管理組件,實現斷路器模式,幫助服務依賴中出現的延遲和故障提供強大的容錯能力。(熔斷、斷路器,容錯)

nacos注冊中心

loadBalancer

openFeign

gateway

nacos配置中心

sentinel

五、nacos注冊中心

1、搭建nacos注冊中心

下載解壓縮到非中文目錄

啟動nacos服務(默認集群模式啟動)

以單機版模式啟動服務
?startup.cmd -m standalone

http://localhost:8848/nacos/

用戶名nacos 密碼nacos

2、注冊微服務到nacos注冊中心

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient //啟用服務發現組件的客戶端
public class ProjectCApplication {
?public static void main(String[] args) {SpringApplication.run(ProjectCApplication.class, args);}
?
}
# Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts.html
#當前項目在nacos注冊中心暴漏的服務名
spring.application.name=projectC
# Nacos認證信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服務發現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注冊到 nacos 的指定 namespace,默認為 public
spring.cloud.nacos.discovery.namespace=public
# 應用服務 WEB 訪問端口
server.port=8082

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

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

相關文章

Oracle 和 MySQL 中的日期類型比較

Oracle 和 MySQL 都提供了多種日期和時間數據類型&#xff0c;但它們在實現和功能上有一些差異。以下是兩者的主要日期類型對比&#xff1a;Oracle 日期類型DATE存儲日期和時間&#xff08;精確到秒&#xff09;格式&#xff1a;YYYY-MM-DD HH24:MI:SS示例&#xff1a;TO_DATE(…

基于 Redis 實現共享 Session 登錄的多種方法與實踐

全文目錄&#xff1a;開篇語**前言****1. 什么是共享 Session 登錄&#xff1f;****2. 基于 Redis 實現共享 Session 的基本方法****2.1 通過 Redis 存儲 Session 數據****2.1.1 基本流程****2.1.2 示例代碼&#xff08;Java Spring Boot Redis&#xff09;****3. 使用 Redis…

spring cloud + easyRules 零基礎搭建智能規則引擎

你是否曾想過在項目中嵌入一套輕量級且高度可擴展的規則引擎&#xff0c;輕松實現動態化的業務決策&#xff1f;在金融、電商、政務等領域&#xff0c;風險控制是業務安全的核心。傳統硬編碼方式很難應對復雜多變的風控需求&#xff0c;而規則引擎允許我們將這些規則獨立出來&a…

AI應用:電路板設計

Diode Computers 公司 Diode Computers是一家專注于利用AI技術進行定制電路板設計和制造的公司&#xff0c;提供從概念到量產的全流程服務。其核心優勢在于將電路板設計轉化為AI可理解的代碼形式&#xff0c;大幅提升設計效率并降低傳統EDA工具的使用門檻 0。 核心服務 設計與制…

RocketMQ學習系列之——客戶端消息確認機制

一、客戶端使用MQ基本代碼示例1、添加maven依賴<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>5.3.0</version> </dependency>2、生產者代碼示例public class Produc…

[leetcode] 組合總和

39. 組合總和 - 力扣&#xff08;LeetCode&#xff09; i class Solution {int aim;vector<vector<int>> ret;vector<int> path; public:vector<vector<int>> combinationSum(vector<int>& nums, int target) {aim target;dfs(nums…

新能源行業B端極簡設計:碳中和目標下的交互輕量化實踐

新能源行業B端極簡設計&#xff1a;碳中和目標下的交互輕量化實踐內容摘要在新能源行業&#xff0c;碳中和目標正推動著企業追求更高的運營效率和更低的資源消耗。然而&#xff0c;傳統的B端交互設計往往復雜繁瑣&#xff0c;不僅增加了用戶的操作成本&#xff0c;還可能導致資…

減速機:自動化生產線的“精密傳動心臟”

減速機作為自動化生產線的核心傳動部件&#xff0c;通過調節轉速與扭矩實現設備精準控制&#xff0c;其在自動化生產線中發揮著關鍵作用。以下是其具體應用方式&#xff1a;輸送線驅動在自動化生產線中&#xff0c;輸送線用于運輸物料、半成品或成品&#xff0c;通過減速機可以…

從0到1學PHP(五):PHP 數組:高效存儲與處理數據

目錄一、數組的定義與分類1.1 索引數組1.2 關聯數組1.3 多維數組二、數組的基本操作2.1 數組元素的添加、刪除、修改和訪問2.2 數組指針的操作三、數組處理函數3.1 數組排序函數3.2 數組統計函數3.3 數組過濾與轉換函數一、數組的定義與分類 在 PHP 中&#xff0c;數組是一種非…

vscode 字體的跟換

打開vscode 左下角輸入電腦中已經有的字體&#xff1a;有想要用的可以自己進行安裝刷新這樣就可改變了

墨者:SQL過濾字符后手工注入漏洞測試(第3題)

1. 墨者學院&#xff1a;SQL過濾字符后手工注入漏洞測試(第3題)&#x1f680; 因為練習過太多的sql注入&#xff0c;廢話不多介紹&#xff0c;我會通過圍繞手動注入和工具爆破的方式達到靶場目標&#xff0c;開練&#xff01;&#xff01;&#xff01; 2. 手工注入方式&#x1…

【Spring AI實戰】實現仿DeepSeek頁面對話機器人(支持多模態上傳)

一、前言 二、實現效果 三、代碼實現 3.1 后端代碼 3.2 前端代碼 一、前言 Spring AI詳解&#xff1a;【Spring AI詳解】開啟Java生態的智能應用開發新時代(附不同功能的Spring AI實戰項目)-CSDN博客 二、實現效果 可上傳圖片或音頻數據給大模型分析 三、代碼實現 3.1 后…

Vue 正在熱映模塊

Vue 漸進式JavaScript 框架 基于Vue2的移動端項目&#xff1a;正在熱映模塊 目錄 正在熱映 數據修改 導入axios 配置反向代理 正在熱映渲染 賦值數據 渲染列表 顯示圖片 優化列表 設置列表樣式 主演 定義過濾器 使用過濾器 主演過長處理 無主演情況處理 觀眾評…

阿里云上進行k8s集群的配置

在阿里云容器服務Kubernetes&#xff08;ACK&#xff09;中配置集群的核心步驟可分為以下六大關鍵環節&#xff0c;涵蓋架構設計到運維管理&#xff1a;1. 集群規劃與基礎配置 集群類型選擇 托管版&#xff1a;Master節點由阿里云托管&#xff08;推薦生產環境&#xff09;專有…

頁面性能優化

優化點解決方案效果雙向綁定數量過多競對設置單元格內部涉及雙向綁定的輸入組件過多&#xff0c;線上頁面最多有88個該和抽屜中的編輯表格一樣的組件&#xff0c;共計930個&#xff08;按每行最少6個來計算的&#xff09;雙向綁定的組件&#xff0c;嚴重拖累頁面性能。數據計算…

詳細說明零拷貝

詳細說明零拷貝【一】零拷貝介紹【1】說明【2】為什么需要零拷貝&#xff1f;—— 傳統數據傳輸的問題【3】零拷貝的核心優化【4】零拷貝的實現方式&#xff08;1&#xff09;mmap&#xff08;內存映射&#xff09;&#xff08;2&#xff09;sendfile&#xff08;Linux 系統調用…

docker部署自己寫的c++http服務器教程

我用的是ubuntu 22.04環境下 qt c 寫的應用程序&#xff0c;是終端程序&#xff0c;不是界面&#xff0c;然后用linuxdeployqt工具將其打包成了AppImage可執行文件&#xff0c;以上是部署前的準備工作&#xff0c;需要確保AppImage可執行文件在自己的ubuntu上可以運行才能執行以…

Caffeine 緩存庫的常用功能使用介紹

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)

目錄 列表&#xff08;List&#xff09;特點 創建列表 RemoveAll 刪除與之條件相匹配的數據 會返回刪除的個數 Capacity 獲取或設置列表的容量 更多方法可參照上篇文章&#xff1a;C#_ArrayList動態數組 字典&#xff08;Dictionary&#xff09;特點 定義一個字典 向字…

【實時Linux實戰系列】實時網絡控制與調度

在實時控制系統中&#xff0c;網絡調度是確保實時數據流傳輸和處理不受延遲影響的關鍵。實時網絡控制與調度技術對于工業自動化、金融交易、多媒體流等領域至關重要。通過合理設計網絡調度策略&#xff0c;可以顯著提高系統的實時性和可靠性。本文將介紹如何在實時控制系統中實…