SpringCloudAlibaba學習(解決SpringBoot初始化以及Nginx啟動出錯問題)
- 2022 年 6 月 22 日
- 筆記
- SpringCloud
微服務強調每個服務都是單獨的資料庫
在不使用微服務的情況下可以採用分散式架構,通過Template來調用遠程的Rest介面
但這種方式維護起來很麻煩,而且有很多弊端。
一、環境搭建
1、首先搭建SpringBoot框架
使用Spring Initializr快速搭建SpringBoot框架時可能會遇到訪問超時的問題。此問題有兩種解決的辦法:
①將服務源改成//start.aliyun.com,這種方法是採用alibaba的springboot架構模型,會和常規的模型有出入。(這種方法有的時候搭建出來沒有pom文件,不能被識別為maven項目,這種情況採用第二種方法即可)
②將服務源改成//start.springboot.io,這種方式是採用傳統的springboot架構模型,只是這個是中國源。
SpringCloud的學習結合://spring.io/projects/spring-cloud-alibaba 和 //github.com/alibaba/spring-cloud-alibaba/wiki進行學習
依賴版本說明:
因為我使用的Nacos版本是2.0.0的,所以SpringCloud版本選用2.2.7.RELEASE,相應的SpringBoot的版本採用2.3.12.RELEASE
1、首先添加SpringCloudAlibaba依賴
//將依賴放在dependencyManagement中繼承該父項目的子類必須顯示的聲明才能使用。
//一般都會採用這種方式來繼承一個版本管理器,因為
至此,SpringCloudAlibaba的環境就已經搭建好了。
二、註冊中心Nacos
1、單機模式
①搭建分散式架構,通過分散式架構來搭建微服務架構
通過RestTempate來實現調用遠程的rest介面
首先添加RestTemplate的配置類
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
然後調用restTemplate的方法:getforObject(),通過傳入微服務的服務名和返回值類型來實現遠程介面的調用。
②啟動 進入到nacos的bin目錄,在cmd中運行 startup -m standalone
③複製輸出的網址到瀏覽器進行訪問 默認帳號和密碼都是nacos
④在每個微服務(子SpringBoot項目)中加入nacos依賴
④在配置文件中配置nacox
應用名稱,nacos會把它當做是服務名稱
spring:
application:
name: order-service
cloud:
nacos:
server-addr: ip:8848
discovery:
username: nacos
password: nacos
#命名空間,用於拆分服務(可以將服務拆分為生產環境和測試環境)
namespace: public
⑤這時候服務註冊與發現就會自動將我們的服務註冊到nacos註冊中心
⑥此時直接在瀏覽器訪問的話會報404錯誤,是因為nacos的執行原理是依賴負載均衡器來調用微服務的。此時只需要在RestTemplate的配置類上加入註解@LoadBalanced即可為服務端配置負載均衡。(該負載均衡採用的是輪詢機制)即:
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
nacos執行原理:
創建永久實例:通過:spring.cloud.nacos.discovery.ephemeral: false 哪怕宕機了也不會刪除實例
2、集群模式部署nacos
①修改application.properties文件,修改埠號,數據源使用mysql,修改mysql資料庫的連接參數
②修改cluster.conf.example文件(現將其拷貝一份,然後將名字修改為cluster.conf)
③修改startup文件,將佔用記憶體修改小一點。
④安裝Nginx並啟動,第一次啟動可能會一閃而過,這時查看日誌,如果有錯誤則修改監聽埠,如果沒錯誤則說明啟動成功(windows啟動Nginx本身就是一閃而過)
在啟動之前還應該加入(Nginx是最常見的軟體負載均衡)
upstream nacoscluster{
server ip:8849;
server ip:8851;
server ip:8860;
}
及修改
location /nacos/{
proxy_pass //nacoscluster/nacos/;
}
⑤將application.yml中的伺服器地址改為Nginx的地址啟動即可
三、微服務負載均衡器Ribbon
內置很多負載均衡的策略,我們可以通過覆蓋掉這些配置,有兩種方式:
1、通過配置類的方式進行修改
①新建一個Ribbon的配置類,注意該配置類不能放在掃描包能掃到的位置,要不然會衝突
@Configuration
public class RibbenRandomRuleConfig {
/方法名一定要叫這個/
@Bean
public IRule iRule(){//IRule是所有負載均衡策略的父介面
return new RandomRule();
}
}
在啟動類上加上註解:
@RibbonClients(value = {
@RibbonClient(name = “stock-service”,configuration = RibbenRandomRuleConfig.class)
2、通過配置文件的方式進行修改
權重
stock-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
Spring Cloud LoadBalancer:是Spring Cloud官方自己提供的客戶端負載均衡器,用於替代Ribbon
使用:
①首先設置Ribbon為禁用,或者在依賴中排除Ribbon(建議使用依賴排除)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--將Ribbon排除掉-->
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netfix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
在配置中加入:
spring:
cloud:
loadbalancer:
ribbon:
enable: false
②定義配置類,配置Bean,定義自己的負載均衡策略
③在啟動類上加註解@LoadBalancerClients(),使用方法和Ribbon相同,只是註解不同。