🏆🏆🏆教程全知識點簡介:Docker實用篇 0.學習目標 1.初識Docker 1.2.Docker和虛擬機的區別 2.Docker的基本操作 2.1.鏡像操作 2.1.3.案例1-拉取、查看鏡像 2.1.5.練習 3.Dockerfile自定義鏡像 3.3.構建Java項目 3.4.小結 4.Docker-Compose 4.3.部署微服務集羣 4.3.1.compose文件 4.3.3.打包 設置docker鏡像源 關閉 禁止開機啓動防火牆 安裝 修改權限 補全命令 RabbitMQ 1.初識MQ 1.1.同步和異步通訊 1.2.技術對比: 2.快速入門 2.2.RabbitMQ消息模型 2.3.導入Demo工程 2.4.入門案例 2.4.1.publisher實現 3.1.3.測試 3.2.WorkQueue 3.2.1.消息發送 3.2.4.能者多勞 3.3.發佈/訂閲 3.4.Fanout 3.4.1.聲明隊列和交換機 3.5.Direct 3.6.Topic 3.6.1.説明 SpringCloud01 1.認識微服務 1.1.單體架構 2.服務拆分和遠程調用 2.1.服務拆分原則 2.3.實現遠程調用案例 2.3.1.案例需求: 2.3.2.註冊RestTemplate 3)啓動多個user-service實 4.Ribbon負載均衡 4.1.負載均衡原理 4.2.源碼跟蹤 1)LoadBalancerIntercepor 3)負載均衡策略IRule 5.Nacos註冊中心 5.1.認識和安裝Nacos 5.2.服務註冊到nacos 1)引入依賴 2)配置nacos地址 3)重啓 5.3.服務分級存儲模型 5.3.2.同集羣優先的負載均衡 5.4.權重配置 Nacos安裝指南 1.Windows安裝 1.1.下載安裝包 1.2.解壓 1.3.端口配置 1.4.啓動 1.5.訪問 2.Linux安裝 2.1.安裝JDK 3.Gateway服務網關 3.1.為什麼需要網關 3.3.斷言工廠
<!-- start:bj1 -->
📚📚倉庫code.zip 👉直接-->: https://gitlab.com/yiqing112/backend/-/blob/main/Spring/Sprin... 🍅🍅
<!-- end:bj1 -->
✨ 本教程項目亮點
🧠 知識體系完整:覆蓋從基礎原理、核心方法到高階應用的全流程內容
💻 全技術鏈覆蓋:完整前後端技術棧,涵蓋開發必備技能
🚀 從零到實戰:適合 0 基礎入門到提升,循序漸進掌握核心能力
📚 豐富文檔與代碼示例:涵蓋多種場景,可運行、可複用
🛠 工作與學習雙參考:不僅適合系統化學習,更可作為日常開發中的查閲手冊
🧩 模塊化知識結構:按知識點分章節,便於快速定位和複習
📈 長期可用的技術積累:不止一次學習,而是能伴隨工作與項目長期參考
🎯🎯🎯全教程總章節
🚀🚀🚀本篇主要內容
SpringCloud實用篇02
0.學習目標
1.Nacos配置管理
Nacos除了可以做註冊中心,同樣可以做配置管理來使用。
1.1.統一配置管理
當微服務部署的實例越來越多,達到數十、數百時,逐個修改微服務配置就會讓人抓狂,而且很容易出錯。 需要一種統一配置管理方案,可以集中管理所有實例的配置。
Nacos一方面可以將配置集中管理,另一方可以在配置變更時,及時通知微服務,實現配置的熱更新。
1.1.1.在nacos中添加配置文件
如何在nacos中管理配置呢?
然後在彈出的表單中,填寫配置信息:
注意:項目的核心配置,需要熱更新的配置才有放到nacos管理的必要。基本不會變更的一些配置還是保存在微服務本地比較好。
1.1.2.從微服務拉取配置
微服務要拉取nacos中管理的配置,並且與本地的application.yml配置合併,才能完成項目啓動。
但如果尚未讀取application.yml,又如何得知nacos地址呢?
因此spring引入了一種新的配置文件:bootstrap.yaml文件,會在application.yml之前被讀取,流程如下:
1)引入nacos-config依賴
首先,在user-service服務中,引入nacos-config的客户端依賴:
<!--nacos配置管理依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)添加bootstrap.yaml
然後,在user-service中添加一個bootstrap.yaml文件,內容如下:
spring:
application:
name: userservice # 服務名稱
profiles:
active: dev #開發環境,這裏是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件後綴名
這裏會根據spring.cloud.nacos.server-addr獲取nacos地址,再根據
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作為文件id,來讀取配置。
本例中,就是去讀取userservice-dev.yaml:
3)讀取nacos配置
在user-service中的UserController中添加業務邏輯,讀取pattern.dateformat配置:
完整代碼:
package cn.itcast.user.web;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
// ...略
}
在頁面訪問,可以看到效果:
1.2.配置熱更新
最終的目的,是修改nacos中的配置後,微服務中無需重啓即可讓配置生效,也就是配置熱更新。
要實現配置熱更新,可以使用兩種方式:
1.2.1.方式一
在@Value注入的變量所在類上添加註解@RefreshScope:
1.2.2.方式二
使用@ConfigurationProperties註解代替@Value註解。
在user-service服務中,添加一個類,讀取patterrn.dateformat屬性:
package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@Conf
# 2.Feign遠程調用
先來看 以前利用RestTemplate發起遠程調用的代碼:

存在下面的問題:
•代碼可讀性差,編程體驗不統一
•參數複雜URL難以維護
Feign是一個聲明式的http客户端,官方地址:https://github.com/OpenFeign/feign
其作用就是幫助 優雅的實現http請求的發送,解決上面提到的問題。

## 2.1.Feign替代RestTemplate
Fegin的使用步驟如下:
### 1)引入依賴
在order-service服務的pom文件中引入feign的依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
### 2)添加註解
在order-service的啓動類添加註解開啓Feign的功能:

### 3)編寫Feign的客户端
在order-service中新建一個接口,內容如下:
package cn.itcast.order.client;
import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
這個客户端主要是基於SpringMVC的註解來聲明遠程調用的信息,比如:
- 服務名稱:userservice
- 請求方式:GET
- 請求路徑:/user/{id}
- 請求參數:Long id
- 返回值類型:User
這樣,Feign就可以幫助 發送http請求,無需自己使用RestTemplate來發送了。
### 4)測試
修改order-service中的OrderService類中的queryOrderById方法,使用Feign客户端代替RestTemplate:

是不是看起來優雅多了。
### 5)總結
使用Feign的步驟:
① 引入依賴
② 添加@EnableFeignClients註解
③ 編寫FeignClient接口
④ 使用FeignClient中定義的方法代替RestTemplate
## 2.2.自定義配置
Feign可以支持很多的自定義配置,如下表所示:
| 類型 | 作用 | 説明 |
| ---------------------- | ---------------- | ------------------------------------------------------ |
| **feign.Logger.Level** | 修改日誌級別 | 包含四種不同的級別:NONE、BASIC、HEADERS、FULL |
| feign.codec.Decoder | 響應結果的解析器 | http遠程調用的結果做解析,例如解析json字符串為java對象 |
| feign.codec.Encoder | 請求參數編碼 | 將請求參數編碼,便於通過http請求發送 |
| feign. Contract | 支持的註解格式 | 默認是SpringMVC的註解 |
| feign. Retryer | 失敗重試機制 | 請求失敗的重試機制,默認是沒有,不過會使用Ribbon的重試 |
一般情況下,默認值就能滿足 使用,如果要自定義時,只需要創建自定義的@Bean覆蓋默認Bean即可。
下面以日誌為例來演示如何自定義配置。
### 2.2.1.配置文件方式
基於配置文件修改feign的日誌級別可以針對單個服務:
feign:
client:
config:
userservice: # 針對某個微服務的配置
loggerLevel: FULL # 日誌級別
也可以針對所有服務:
feign:
client:
config:
default: # 這裏用default就是全局配置,如果是寫服務名稱,則是針對某個微服務的配置
loggerLevel: FULL # 日誌級別
而日誌的級別分為四種:
- NONE:不記錄任何日誌信息,這是默認值。
- BASIC:僅記錄請求的方法,URL以及響應狀態碼和執行時間
- HEADERS:在BASIC的基礎上,額外記錄了請求和響應的頭信息
- FULL:記錄所有請求和響應的明細,包括頭信息、請求體、元數據。
### 2.2.2.Java代碼方式
也可以基於Java代碼來修改日誌級別,先聲明一個類,然後聲明一個Logger.Level的對象:
public class DefaultFeignConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC; // 日誌級別為BASIC
}
}
如果要**全局生效**,將其放到啓動類的@EnableFeignClients這個註解中:
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .cla
🚀✨ (未完待續)項目系列下一章
📚下一篇 將進入更精彩的環節!
🔔 記得收藏 & 關注,第一時間獲取更新!
🍅 一起見證整個系列逐步成型的全過程。