Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos

  • 一.Eureka引入
    • 1.注冊中心
    • 2.CAP理論
    • 3.常見的注冊中心
  • 二.Eureka介紹
    • 1.搭建Eureka Server 注冊中心
    • 2.搭建服務注冊
    • 3.服務發現
  • 三.負載均衡LoadBalance
    • 1.問題引入
    • 2.服務端負載均衡
    • 3.客戶端負載均衡
    • 4.Spring Cloud LoadBalancer
      • 1).快速上手
      • 2)負載均衡策略
      • 3)自定義負載均衡策略
      • 4)LoadBalancer 原理
      • 5)服務部署
  • 四.Nacos
    • 1.安裝
      • 1)window環境
      • 2)Linux環境
    • 2.快速上手
  • 五.Nacos負載均衡
    • 1.服務器下線
      • 修改權重報錯
    • 2.同集群優先訪問
      • 配置集群的名稱
    • 3.健康檢查
      • nacos服務器實例
    • 4.環境隔離
      • 創建環境
  • 六.Nacos的配置中心
    • 1.配置中心的需求
    • 2.快速上手
    • 3.配置中心詳解
      • data id說明
    • 4.部署nacos
  • 七.Nacos與Eureka的區別
    • 1.共同點
    • 2.區別

一.Eureka引入

在環境搭建中,遠程調用使用的url是寫死的,當更換機器,或者新增機器時,這個URL就需要跟著變更,就需要去通知所有的相關服務去修改。隨之而來的就是各個項目的配置文件反復更新,各個項目的頻繁部署。

此時就引入了注冊中心和服務發現,服務啟動/變更時,向注冊中心報道。注冊中心記錄應用和IP的關系。調用方調用時,先去注冊中心獲取服務方的IP,再去服務方進行調用。

1.注冊中心

在最初的架構體系中,集群的概念還不那么流行,且機器數量也比較少,此時直接使用DNS+Nginx就可以滿足幾乎所有服務的發現。相關的注冊信息直接配置在Nginx。

但是隨著微服務的流行與流量的激增,機器規模逐漸變大,并且機器會有頻繁的上下線行為,這種時候需要運維?動地去維護這個配置信息是?個很麻煩的操作。

所以開發者們開始希望有這么?個東西,它能維護?個服務列表,哪個機器上線了,哪個機器宕機了,這些信息都會自動更新到服務列表上,客戶端拿到這個列表,直接進行服務調用即可。這個就是注冊中心。

注冊中心主要有三種角色:

  • 服務提供者(Server):一次業務中,被其它微服務調用的服務。也就是提供接口給其它微服務.
  • 服務消費者(Client):一次業務中,調用其它微服務的服務。也就是調?其它微服務提供的接口.
  • 服務注冊中心(Registry):用于保存Server 的注冊信息,當Server 節點發生變更時,Registry 會同步變更。服務與注冊中心使用?定機制通信,如果注冊中心與某服務長時間無法通信,就會注銷該實例。

他們之間的關系以及工作內容,可以通過兩個概念來描述:

服務注冊:服務提供者在啟動時,向 Registry 注冊自身服務,并向 Registry 定期發送心跳匯報存活狀
態。
服務發現: 服務消費者從注冊中心查詢服務提供者的地址,并通過該地址調?服務提供者的接口。服務發現的?個重要作用就是提供給服務消費者?個可用的服務列表。
在這里插入圖片描述

2.CAP理論

CAP理論是分布式系統設計中的核心原則,由計算機科學家Eric Brewer于2000年提出,用于描述分布式數據存儲系統在面臨網絡分區時需做出的權衡。其核心觀點為:在一致性(Consistency)、可用性(Availability)、分區容忍性(Partition Tolerance)三者中,最多只能同時滿足兩項。

  • 一致性(Consistency) :CAP理論中的一致性,指的是強一致性。所有節點在同一時間具有相同的數據
  • 可用性(Availability):保證每個請求都有響應(響應結果可能不對)
  • 分區容錯性(Partition Tolerance):當出現網絡分區后,系統仍然能夠對外提供服務

舉一個栗子:一個部門全國各地都有崗位,這時候,總部下發了?個通知,由于通知需要開會周知全員,當有客戶咨詢時:

  1. 所有成員對客戶的回應結果都是一致的(一致性)
  2. 客戶咨詢時,?定有回應(可用性)
  3. 當其中?個成員休假時,這個部門的其他成員也可以對客戶提供咨詢服務(分區容錯性)

CAP 理論告訴我們:
一個分布式系統不可能同時滿足數據?致性。服務可用性和分區容錯性這三個基本需求,最多只能同時滿足其中的兩個.

CP架構:為了保證分布式系統對外的數據?致性,于是選擇不返回任何數據
AP架構:為了保證分布式系統的可用性,節點2返回V0版本的數據(即使這個數據不正確)
更多參考

在這里插入圖片描述

在分布式系統中,系統間的網絡不能100%保證健康,服務?必須對外保證服務。因此Partition Tolerance不可避免。那就只能在C和A中選擇?個。也就是CP或者AP架構。

正常情況下:在這里插入圖片描述

網絡異常:

在這里插入圖片描述

3.常見的注冊中心

  1. Zookeeper
    Zookeeper的官方并沒有說它是一個注冊中心,但是國內Java體系,大部分的集群環境都是依賴
    Zookeeper來完成注冊中心的功能。
  2. Eureka
    Eureka是Netflix開發的基于REST的服務發現框架,主要用于服務注冊,管理,負載均衡和服務故障
    轉移。
    官方聲明在Eureka2.0版本停止維護,不建議使用。但是Eureka是SpringCloud服務注冊/發現的默認
    實現,所以目前還是有很多公司在使用。
  3. Nacos
    Nacos是Spring Cloud Alibaba架構中重要的組件,除了服務注冊,服務發現功能之外,Nacos還支持
    配置管理,流量管理,DNS,動態DNS等多種特性。

在這里插入圖片描述

Eureka 和Zookeeper區別
Eureka和Zookeeper都是用于服務注冊和發現的工具,區別如下:

  1. Eureka是Netflix開源的項目,而Zookeeper是Apache開源的項目。
  2. Eureka 基于AP原則,保證高可用,Zookeeper基于CP原則,保證數據?致性。
  3. Eureka 每個節點 都是均等的,Zookeeper的節點區分Leader 和Followe 或 Observer,也正因為這
    個原因,如果Zookeeper的Leader發生故障時,需要重新選舉,選舉過程集群會有短暫時間的不可用

二.Eureka介紹

Eureka是Netflix OSS套件中關于服務注冊和發現的解決方案。Spring Cloud對Eureka進行了集成,并
作為優先推薦方案進行宣傳,雖然目前Eureka 2.0已經停止維護,新的微服務架構設計中,也不再建議使用,但是目前依然有大量公司的微服務系統使用Eureka作為注冊中心。官方文檔

Eureka主要分為兩個部分:

  • Eureka Server:作為注冊中心Server端向微服務應用程序提供服務注冊,發現,健康檢查等能力.
  • Eureka Client:服務提供者,服務啟動時,會向Eureka Server 注冊自己的信息(IP,端口,服務信息等),Eureka Server 會存儲這些信息

1.搭建Eureka Server 注冊中心

環境搭建和之前類似,就繼續使用上次的文件進行搭建Eureka Server:
在這里插入圖片描述
*在這里插入圖片描述手動添加依賴:在這里插入圖片描述
添加配置文件:

server:port: 10010
spring:application:name: eureka-server
eureka:instance:hostname: localhostclient:fetch-registry: false # 表?是否從Eureka Server獲取注冊信息,默認為true.因為這是  ?個單點的Eureka Server,不需要同步其他的Eureka Server節點的數據,這?設置為falseregister-with-eureka: false # 表?是否將??注冊到Eureka Server,默認為true.由于當前應?就是Eureka Server,故?設置為false.service-url:# 設置與Eureka Server的地址,查詢服務和注冊服務都需要依賴這個地址.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

寫啟動類:
在這里插入圖片描述

查看Erueka
在這里插入圖片描述

2.搭建服務注冊

  1. 加入依賴:在這里插入圖片描述

  2. 修改配置文件:
    在這里插入圖片描述

  3. 成功后:在這里插入圖片描述

3.服務發現

服務發現和服務注冊是一樣配置的,只講述不同的地方:在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

三.負載均衡LoadBalance

1.問題引入

  1. 點開services:
    在這里插入圖片描述

  2. 添加SpringBoot:
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

  3. 重命名和設置Modify options:
    在這里插入圖片描述
    在這里插入圖片描述

  4. 設置VM:
    在這里插入圖片描述
    在這里插入圖片描述

  5. 再復制一個9092后將兩個都啟動:
    在這里插入圖片描述
    在這里插入圖片描述

發請了多次請求后,只有9090product被使用,其他兩個并沒有參與使用:在這里插入圖片描述

此時為了解決這個問題,將代碼重新組織后,就會只有一個product被使用了,這就是負責均衡的作用:在這里插入圖片描述
在這里插入圖片描述

負載均衡:
負載均衡(Load Balance,簡稱 LB), 是高并發,高可用系統必不可少的關鍵組件。當服務流量增大時,通常會采用增加機器的方式進行擴容,負載均衡就是用來在多個機器或者其他資源中,按照?定的規則合理分配負載。

上面的例子中,我們只是簡單的對實例進行了輪詢,但真實的業務場景會更加復雜。比如根據機器的配置進行負載分配,配置高的分配的流量高,配置低的分配流量低等。

服務多機部署時,開發?員都需要考慮負載均衡的實現,所以也出現了一些負載均衡器,來幫助我們實現負載均衡。

2.服務端負載均衡

在服務端進行負載均衡的算法分配。比較有名的服務端負載均衡器是Nginx。請求先到達Nginx負載均衡器,然后通過負載均衡算法,在多個服務器之間選擇?個進行訪問。

在這里插入圖片描述

3.客戶端負載均衡

在客戶端進行負載均衡的算法分配。把負載均衡的功能以庫的方式集成到客戶端,而不再是由一臺指定的負載均衡設備集中提供。

比如Spring Cloud的Ribbon,請求發送到客戶端,客戶端從注冊中心(比如Eureka)獲取服務列表,在發
送請求前通過負載均衡算法選擇?個服務器,然后進行訪問。

Ribbon是Spring Cloud早期的默認實現,由于不維護了,所以最新版本的Spring Cloud負載均衡集成的
是Spring Cloud LoadBalancer(Spring Cloud官方維護)

在這里插入圖片描述

4.Spring Cloud LoadBalancer

1).快速上手

  1. 添加注解:
    在這里插入圖片描述
  2. 修改遠程調用代碼:在這里插入圖片描述

2)負載均衡策略

負載均衡策略是?種思想,無論是哪種負載均衡器,它們的負載均衡策略都是相似的。Spring Cloud
LoadBalancer 僅支持兩種負載均衡策略:輪詢策略 和 隨機策略

  1. 輪詢(Round Robin):輪詢策略是指服務器輪流處理用戶的請求。這是?種實現最簡單,也最常?的
    策略。
  2. 隨機選擇(Random):隨機選擇策略是指隨機選擇?個后端服務器來處理新的請求。

3)自定義負載均衡策略

Spring Cloud LoadBalancer 默認負載均衡策略是 輪詢策略,實現是 RoundRobinLoadBalancer,如果
服務的消費者如果想采用隨機的負載均衡策略,也非常簡單。(參考官網地址)
在這里插入圖片描述

在這里插入圖片描述

4)LoadBalancer 原理

LoadBalancer 的實現,主要是 LoadBalancerInterceptor,這個類會對 RestTemplate 的請求進行攔截,然后從Eureka根據服務id獲取服務列表,隨后利用負載均衡算法得到真實的服務地址信息,替換服務id。

通過intercept方法進行攔截:
在這里插入圖片描述
進入execute方法:在這里插入圖片描述
進入choose:
在這里插入圖片描述
繼續進入choose:
在這里插入圖片描述
隨機實現:在這里插入圖片描述
getInstanceResponse方法:
在這里插入圖片描述

隨機下標:
在這里插入圖片描述

輪詢:
在這里插入圖片描述

5)服務部署

  1. 部署MySQL
  2. 數據初始化
  3. 修改配置文件(dev和prod環境)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

  1. 打包(每一個都要打包Erueka、order、product)
    在這里插入圖片描述
    在這里插入圖片描述
  2. 上傳jar包,三個都要上傳,第一次上傳需要安裝Lrzsz,命令:apt install lrzsz
  3. 啟動實例:在這里插入圖片描述
    在這里插入圖片描述
  4. 在云服務器 的安全組或者防火墻上開通端口號
  5. 通過公網訪問Erueka和之前的order

四.Nacos

1.安裝

下載地址

二選一即可:在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

1)window環境

Nacos的啟動模式是默認的集群模式,需要通過startup.cmd文件來改成單機模式:在這里插入圖片描述
在這里插入圖片描述
改完后啟動startup.cmd文件:在這里插入圖片描述
通過127.0.0.1:8848:nacos進入:在這里插入圖片描述
如果此時8848的端口號被占用,使用cmd命令框進行查找該端口號的進程并且殺死該進程,或者通過修改Nacos的端口號:

35436就是進程ID:
在這里插入圖片描述

通過紅框命令殺死進程:
在這里插入圖片描述

修改端口號的話,先進入conf的文件:在這里插入圖片描述

打開properties的這個文件:在這里插入圖片描述
修改此處的端口號即可:在這里插入圖片描述

2)Linux環境

  1. 在Linux上創建自己的目錄:在這里插入圖片描述

  2. 直接將下載好的zip文件拖到Linux中后,在輸入:unzip 壓縮文件名進行解壓,但是在第一次進行壓縮時需要先安裝unzip安裝的命令:apt-get install unzip:
    在這里插入圖片描述
    在這里插入圖片描述

  3. 修改端口號:
    在這里插入圖片描述
    在這里插入圖片描述

  4. 后續就是將nacos設置成單機模式,通過命令:bash startup.sh -m standalone進入后,修改為單機模式,如果能進入nacos的頁面,則代表成功了:
    在這里插入圖片描述
    在這里插入圖片描述

2.快速上手

  1. 在父項目中引入Spring-Cloud- Alibaba依賴
<properties>
<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
  1. 子項目加上nacos和LoadBalance的依賴:
		<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
  1. 修改配置,使用nacos服務器地址
spring:application:name: cloud:nacos:discovery:server-addr: 110.41.51.65:10020
  1. 啟動之前的訂單和產品類(需將之前Erueka的配置和依賴刪去,不然會和nacos沖突),啟動后nacos的網頁服務列表中就會出現信息
    n/direct/a5d901ce25284f47b371cf007da7d25a.png)

  2. 測試

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

五.Nacos負載均衡

1.服務器下線

點擊下方紅色框進入服務器詳情:在這里插入圖片描述
其中有下線操作,直接點擊下線操作后,這個服務器之后就不會接收請求了,請求被其他兩個服務器進行接收:
在這里插入圖片描述
通過編輯修改服務器的權重:
在這里插入圖片描述
想使用到這個權重,需要訂單order的項目在配置文件中配置nacos的負載均衡策略:

  cloud:loadbalancer:nacos:enabled: true

測試:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

修改權重報錯

windows環境下直接刪除data下的protocol文件,Linux環境的話,也是找到對應的文件刪除即可:在這里插入圖片描述

2.同集群優先訪問

Nacos把同一個機房內的實例,劃分為一個集群。所以同集群優先訪問,在一定程度上也可以理解為同機房優先訪問。

微服務架構中,一個服務通常有多個實例共同提供服務,這些實例可以部署在不同的機器上,這些機器可以分布在不同的機房,比如product-service:
實例1:分布在上海機房
實例2:分布在上海機房
實例3:分布在北京機房
實例4:分布在北京機房

在這里插入圖片描述
微服務訪問時,應盡量訪問同機房的實例。當本機房內實例不可用時,才訪問其他機房的實例。比如order-service 在上海機房,product-service 在北京和上海機房都有實例,那我們希望可以優先訪問上海機房,如果上海機房沒有實例,或者實例不可用,再訪問北京機房的實例。通常情況下,因為同一個機房的機器屬于一個局域網,局域網訪問速度更快一點.在這里插入圖片描述

配置集群的名稱

  cloud:nacos:discovery:server-addr: 1.95.194.117:8848cluster-name: BJ

其他端口號的Product服務器也需要更改:
復制后,再粘貼上去
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

此時只有9090的Product的服務器才能接收,其他都接收不到:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
如果此時9090下線后,其他另一個集群的機器就能夠接收了:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3.健康檢查

兩種健康檢查機制:

Nacos作為注冊中心,需要感知服務的健康狀態,才能為服務調用方提供良好的服務。Nacos 中提供了兩種健康檢查機制:

客戶端主動上報機制:

  • 客戶端通過心跳上報方式告知服務端(nacos注冊中心)健康狀態,默認心跳間隔5秒;
  • nacos會在超過15秒未收到心跳后將實例設置為不健康狀態,超過30秒將實例刪除
    服務器端反向探測機制:
  • nacos主動探知客戶端健康狀態,默認間隔為20秒
  • 健康檢查失敗后實例會被標記為不健康,不會被立即刪除

在這里插入圖片描述

nacos服務器實例

Nacos的服務實例(注冊的節點)分為臨時實例和非臨時實例

  • 臨時實例:如果實例宕機超過一定時間,會從服務列表剔除,默認類型.
  • 非臨時實例:如果實例宕機,不會從服務列表剔除,也可以叫永久實例
    Nacos對臨時實例,采取的是 客戶端主動上報機制,對非臨時實例,采取服務器端反向探測機制。

在這里插入圖片描述

配置?個服務實例為永久實例

spring:cloud:nacos:discovery:ephemeral: false # 設置為?臨時實例

修改實例是永久性還是非永久性,無法在原先的基礎上進行修改,只能將之前的protocol文件中的raft刪除后,進行修改:

先進入nacos文件中:在這里插入圖片描述
再找到nacos的進程ID,殺死后,才能進行修改,修改后再重新啟動nacos進程:在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
此時才能夠成功重啟Order項目:在這里插入圖片描述

關閉Order項目的啟動類后,健康狀態為false,但是不會立刻刪除實例:在這里插入圖片描述

4.環境隔離

企業開發中,一個服務會分為開發環境,測試環境和生產環境。

  1. 開發環境:開發?員用于開發的服務器,是最基礎的環境。一般日志級別設置較低,可能會開啟?些
    調試信息。
  2. 測試環境:測試人員用來進行測試的服務器,是開發環境到生產環境的過渡環境。
  3. 生產環境:正式提供對外服務的環境,通常關掉調試信息。
    通常情況下,這幾個環境是不能互相通信的。Nacos提供了namespace(命名空間)來實現環境的隔離。不同的namaspace的服務不可見。

創建環境

  1. 在nacos的頁面上的命名空間中進行新建:
    在這里插入圖片描述
    在這里插入圖片描述

  2. 通過命名空間的id來加入到項目的配置文件中即可:在這里插入圖片描述

spring:cloud:nacos:discovery:namespace: 51152a13-7911-49e3-bbdc-16fd5670a257
  1. 重啟order項目(在重啟之前將實例永久性的配置刪去,并按照上述的方法刪除對應的文件后,重啟nacos,再進行重啟order項目):在這里插入圖片描述
    在這里插入圖片描述
  2. 環境不同是沒辦法進行遠程調用的:在這里插入圖片描述
  3. 將prodcut也放入同樣的環境當中就可以使用了:在這里插入圖片描述
    在這里插入圖片描述

六.Nacos的配置中心

除了注冊中心和負載均衡之外,Nacos還是?個配置中心,具備配置管理的功能。Namespace 的常用場景之一是不同環境的配置區分隔離。例如開發測試環境和生產環境的配置隔離.

1.配置中心的需求

當前項目的配置都在代碼中,會存在以下問題:

  1. 配置文件修改時,服務需要重新部署。微服務架構中,一個服務可能有成百個實例,挨個部署比較麻煩,且容易出錯。
  2. 多人開發時,配置文件可能需要經常修改,使用同一個配置文件容易沖突。配置中心就是對這些配置項進行統一管理。通過配置中心,可以集中查看,修改和刪除配置,無需再逐個修改配置問件。提高效率的同時,也降低了出錯的風險

在這里插入圖片描述
3. 服務啟動時,從配置中心讀取配置項的內容,進行初始化。
4. 配置項修改時,通知微服務,實現配置的更新加載。

2.快速上手

  1. 添加配置
    在這里插入圖片描述
    在這里插入圖片描述

  2. product-service中引入依賴

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud 2020.*之后版本需要引?bootstrap-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. 在product-service的項目中添加一個bootstrap.properties配置文件
spring:application:name: product-servicecloud:nacos:config:server-addr: nacos網頁URL
  1. 寫一個Controller獲取nacos配置項中的nacos.config值:
@RestController
public class NacosController {@Value("${nacos.config}")private String nacosConfig;@RequestMapping("/getConfig")public String getConfig() {return "從Nacos獲取配置項nacos.config: " + nacosConfig;}
}

在這里插入圖片描述

  1. 如果添加一個@RefreshScope注解,此時就會跟隨nacos的配置文件里面的內容一起更新

在這里插入圖片描述
在這里插入圖片描述

3.配置中心詳解

配置中心的配置都在bootstrap.yml文件中,此時再bootstrap中加入命名空間的id,就能獲取對應配置的信息:在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

data id說明

在這里插入圖片描述
在這里插入圖片描述
啟動類時,增加了三個監聽,此時可以通過nacos管理頁面中添加三個配置來進行查看:在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
最先讀取的是:在這里插入圖片描述
此時刪除這個配置項后觀察其他兩個的優先級:在這里插入圖片描述
此時是product-service.properties:在這里插入圖片描述
最后只剩下一個則是最低的優先級:在這里插入圖片描述
在這里插入圖片描述

4.部署nacos

Product-Service項目的POM文件:

<?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"><parent><artifactId>spring-cloud-nacos</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>product-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud 2020.*之后版本需要引?bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies><profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource></resources></build></project>

Product-Service的yml配置文件:

dev環境:

server:port: 9090
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_product?characterEncoding=utf8&useSSL=falseusername: rootpassword: "071711"driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 1.95.194.117:8848
#        cluster-name: BJ
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87   #服務管理的命名空間# 設置 Mybatis 的 xml 保存路徑
mybatis:configuration: # 配置打印 MyBatis 執行的 SQL
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true  #自動駝峰轉換

prod環境:

server:port: 9090
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_product?characterEncoding=utf8&useSSL=falseusername: rootpassword: 云服務器上數據庫密碼driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 1.95.194.117:8848
#        cluster-name: BJ
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87   #服務管理的命名空間# 設置 Mybatis 的 xml 保存路徑
mybatis:configuration: # 配置打印 MyBatis 執行的 SQL
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true  #自動駝峰轉換

普通yml:

spring:application:name: product-serviceprofiles:active: @profile.name@cloud:nacos:config:server-addr: 1.95.194.117:8848
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87   #配置中心的命名空間

Order-Service的pom文件:

<?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"><parent><artifactId>spring-cloud-nacos</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>order-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency></dependencies><profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

dev的yml文件:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_order?characterEncoding=utf8&useSSL=falseusername: rootpassword: "071711"driver-class-name: com.mysql.cj.jdbc.Driver

prod的yml文件:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_order?characterEncoding=utf8&useSSL=falseusername: rootpassword: driver-class-name: com.mysql.cj.jdbc.Driver

普通的yml文件:

server:port: 8080
spring:application:name: order-serviceprofiles:active: @profile.name@cloud:nacos:discovery:server-addr: 1.95.194.117:8848
#        cluster-name: BJ
#        ephemeral: false #非臨時實例
#        namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87loadbalancer:nacos:enabled: true
# 設置 Mybatis 的 xml 保存路徑
mybatis:configuration: # 配置打印 MyBatis 執行的 SQL
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true  #自動駝峰轉換

打包上傳云服務器:

在這里插入圖片描述
在這里插入圖片描述
后臺啟動:
在這里插入圖片描述
成功:在這里插入圖片描述

七.Nacos與Eureka的區別

1.共同點

都支持服務注冊和服務拉取

2.區別

  1. 功能
    Nacos除了服務發現和注冊之外,還提供了配置中心,流量管理和DNS服務等功能。
  2. CAP理論
    Eureka遵循AP原則,Nacos可以切換AP和CP模式,默認AP。
    Nacos 根據配置識別CP或者AP模式。如果注冊Nacos的Client的節點是臨時節點,那么Nacos對這個
    Client節點的效果就是AP,反之是CP。AP和CP可以同時混合存在。
  3. 服務發現
    Eureka:基于拉模式。Eureka Client會定期從Server拉取服務信息,有緩存,默認每30秒拉取?次。
    Nacos:基于推送模式。服務列表有變化時實時推送給訂閱者,服務端和客戶端保持心跳連接.

Nacos:在這里插入圖片描述在這里插入圖片描述

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

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

相關文章

【開關電源】關于GaN反激電源開關噪聲

文章目錄 0 前言1 設計信息1.1 設計需求1.2 原理圖1.3 電源表現 2 原因分析3 橫向對比TI UCG28826 &#xff08;GaN&#xff09;采購的普通QR反激變換器 4 總結 0 前言 筆者原計劃設計一款省電的&#xff0c;效率尚可的&#xff0c;穩定的2路輸出反激電源&#xff0c;用于系統…

DOCA介紹

本文分為兩個部分&#xff1a; DOCA及BlueField介紹如何運行DOCA應用&#xff0c;這里以DNS_Filter為例子做大致介紹。 DOCA及BlueField介紹&#xff1a; 現代企業數據中心是軟件定義的、完全可編程的基礎設施&#xff0c;旨在服務于跨云、核心和邊緣環境的高度分布式應用工作…

mybatis mapper.xml中使用枚舉

重點&#xff1a;application.propertis配置類 #TypeEnumHandler 這個類的包名&#xff0c;不是全路徑 mybatis.type-handlers-packagecom.fan.test.handler兩個枚舉類&#xff1a; public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…

鴻蒙生態:鴻蒙生態校園行心得

&#xff08;個人觀點&#xff0c;僅供參考&#xff09; 兄弟們&#xff0c;今天來淺淺聊一聊這次的設立在長沙的鴻蒙生態行活動。 老樣子&#xff0c;我們先來了解一下這個活動&#xff1a; &#xff28;&#xff41;&#xff52;&#xff4d;&#xff4f;&#xff4e;&#x…

【速寫】多LoRA并行衍生的一些思考

遷移學習上的一個老問題&#xff0c;怎么做多領域的遷移&#xff1f;以前的邏輯認為領域遷移屬于是對參數做方向性的調整&#xff0c;如果兩個領域方向相左&#xff0c;實際上不管怎么加權相加都是不合理的。 目前一些做法想著去觀察LoRA權重矩陣中的稠密塊與稀疏塊&#xff0…

【Delphi 基礎知識 44】接口interface的應用

目錄 1. 前言2. 接口有哪些優勢2.1. 實現多態性2.2 實現多重(解決單繼承限制)2.3 解耦代碼(依賴注入)2.4 便于測試(模擬接口)2.5 跨語言互操作性(COM支持)1. 前言 總結為一句話就是:接口只告訴你要做什么,而類會告訴你應該怎么做 下面是最簡單的接口實現 typeIMyIn…

09.傳輸層協議 ——— TCP協議

文章目錄 TCP協議 談談可靠性TCP協議格式 序號與確認序號窗口大小六個標志位 確認應答機制&#xff08;ACK&#xff09;超時重傳機制連接管理機制 三次握手四次揮手 流量控制滑動窗口擁塞控制延遲應答捎帶應答面向字節流粘包問題TCP異常情況TCP小結基于TCP的應用層協議 TCP協…

NLP高頻面試題(五十一)——LSTM詳解

長短期記憶網絡(LSTM)相較于傳統循環神經網絡(RNN)的核心改進在于通過引入記憶單元(cell state)和門機制(gating mechanism)來有效緩解梯度消失與梯度爆炸問題,從而更好地捕捉長距離依賴關系 。在其網絡結構中,信息通過輸入門(input gate)、遺忘門(forget gate)和…

SpringCloud組件—Eureka

一.背景 1.問題提出 我們在一個父項目下寫了兩個子項目&#xff0c;需要兩個子項目之間相互調用。我們可以發送HTTP請求來獲取我們想要的資源&#xff0c;具體實現的方法有很多&#xff0c;可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 舉個例子&#x…

無需花錢購買域名服務器!使用 VuePress + Github 30分鐘搭建屬于自己的博客網站(保姆級教程)

前言 GitHub Pages 提供免費全球加速的服務器資源&#xff0c;VuePress 將 Markdown 變成藝術品級的網頁&#xff0c;僅需 30 分鐘&#xff0c;你便可以像提交代碼一樣發布文章&#xff0c;過程完全免費。 博客搭建好的效果如下&#xff1a;https://honorsong.github.io/exam…

提交到Gitee倉庫

文章目錄 注冊配置公鑰創建空白的碼云倉庫把本地項目上傳到碼云對應的空白倉庫中 注冊 注冊并激活碼云賬號&#xff08; 注冊頁面地址&#xff1a;https://gitee.com/signup &#xff09; 可以在自己C盤/用戶/用戶名/.ssh 可以看到 有id_rsa.pub 以前在GitHub注冊時搞過&…

如何在 Java 中從 PDF 文件中刪除頁面(教程)

由于 PDF 文件格式不是 Java 原生支持的&#xff0c;因此要從 PDF 中刪除頁面&#xff0c;你需要使用外部庫。 本教程介紹如何使用 JPedal 來實現這一功能。 開始使用 ? 將 JPedal 添加到你的類路徑或模塊路徑中&#xff08;可從官網下載安裝試用版 JAR 文件&#xff09; ?…

機器學習第二篇 多變量線性回歸

數據集&#xff1a;世界幸福指數數據集中的變量有幸福指數排名、國家/地區、幸福指數得分、人均國內生產總值、健康預期壽命、自由權、社會支持、慷慨程度、清廉指數。我們選擇GDP per Capita和Freedom&#xff0c;來預測幸福指數得分。 文件一&#xff1a;linear&#xff0c;…

位運算,狀態壓縮dp(算法競賽進階指南學習筆記)

目錄 移位運算一些位運算的操作最短 Hamilton 路徑&#xff08;狀態壓縮dp模板&#xff0c;位運算&#xff09; 0x是十六進制常數的開頭&#xff1b;本身是聲明進制&#xff0c;后面是對應具體的數&#xff1b; 數組初始化最大值時用0x3f賦值&#xff1b; 移位運算 左移 把二…

Java高頻面試之并發編程-05

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天來報道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面試官&#xff1a;線程有哪些調度方法&#xff1f; 在Java中&#xff0c;線程的調用方法主要包括以下幾種方式&#xff0c;每種方式適用于…

進程的同步和互斥

進程同步&#xff08;synchronous&#xff09; ?通俗理解&#xff1a; 就像在排隊買飯&#xff0c;一個一個來&#xff0c;前面的人不走&#xff0c;后面的人就不能干事。 進程同步就是&#xff1a;多個進程之間需要協調&#xff0c;有先后順序&#xff0c;一個進程要等另一…

PDF處理控件Aspose.PDF指南:使用 Python 將 EPUB 轉換為 PDF

EPUB是一種流行的電子書格式&#xff0c;用于可重排內容&#xff0c;而PDF則廣泛用于固定版式文檔&#xff0c;非常適合共享和打印。如果您想使用 Python 將 EPUB 轉換為 PDF&#xff0c;Aspose.PDF for Python 提供了一個簡單可靠的解決方案。在本教程中&#xff0c;我們將向您…

day4-小白學習JAVA---開發軟件_Scanner鍵盤錄入_Random隨機數_流程控制語句

開發軟件_Scanner鍵盤錄入_Random隨機數_流程控制語句 一、開發軟件idea&#xff08;MAC版&#xff09;1、軟件安裝-安裝社區版2、中英文設置3、保存時格式化配置4、注釋和代碼對不齊5、idea快捷鍵 二、鍵盤錄入--Scanner1、next和nextInt2、next和nextLine區別 三、Random隨機…

MySQL基本查詢與數據操作全面解析

目錄 1. CRUD操作概述 2. Create操作詳解 2.1 表的創建 2.2 單行數據插入 2.3 多行數據插入 2.4 插入沖突處理 3. Retrieve操作詳解 3.1 基礎查詢 全列查詢&#xff08;慎用&#xff09; 指定列查詢 表達式查詢 結果去重 3.2 條件查詢&#xff08;WHERE子句&#…

01.Python代碼Pandas是什么?pandas的簡介

01.Python代碼Pandas是什么&#xff1f;pandas的簡介 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是pandas的使用語法。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性&#xff0c;希望對您有用~ pyth…