四、搭建springCloudAlibaba2021.1版本分布式微服務-加入openFeign遠程調用和sentinel流量控制

OpenFeign遠程調用

1、OpenFeign

OpenFeign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP請求訪問遠程服務,就像調用本地方法一樣的,開發者完全感知不到這是在調用遠程方法,更感知不到在訪問HTTP請求。

2、Feign與OpenFeign的區別

Feign是Spring Cloud組件中一個輕量級RESTful的HTTP服務客戶端,Feign內置了Ribbon,用來做客戶端負載均衡,去調用服務注冊中心的服務。Feign的使用方式是:使用Feign的注解定義接口,調用接口,就可以調用服務注冊中心的服務。

OpenFeign是Spring Cloud在Feign的基礎上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通過動態代理的方式產生實現類,實現類中做負載均衡并調用其他服務。

說明:springcloud F 及F版本以上 springboot 2.0 以上基本上使用openfeign,openfeign 如果從框架結構上看就是2019年feign停更后出現版本,也可以說大多數新項目都用openfeign ,2018年以前的項目在使用 feign。

Sentinel流量控制

1、Sentinel簡介

Sentinel是阿里開源的項目,提供了流量控制、熔斷降級、系統負載保護等多個維度來保障服務之間的穩定性。

官網:https://github.com/alibaba/Sentinel/wiki

Sentinel主要特性:

2、Sentinel與Hystrix的區別


關于Sentinel與Hystrix的區別見:https://yq.aliyun.com/articles/633786/

總體來說:

Hystrix常用的線程池隔離會造成線程上下切換的overhead比較大;Hystrix使用的信號量隔離對某個資源調用的并發數進行控制,效果不錯,但是無法對慢調用進行自動降級;Sentinel通過并發線程數的流量控制提供信號量隔離的功能;

此外,Sentinel支持的熔斷降級維度更多,可對多種指標進行流控、熔斷,且提供了實時監控和控制面板,功能更為強大。

Sentinel 的所有規則都可以在內存態中動態地查詢及修改,修改之后立即生效。同時 Sentinel 也提供相關 API,供您來定制自己的規則策略。

Sentinel 支持以下幾種規則:流量控制規則、熔斷降級規則、系統保護規則、來源訪問控制規則 和 熱點參數規則。

openFeign整合Sentinel

第一個項目 spring-cloud-alibaba-2021-user(調用者)

創建項目名為 spring-cloud-alibaba-2021-user

<?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-alibaba-2021</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>spring-cloud-alibaba-2021-user</artifactId><dependencies><!-- springweb 啟動依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- nacos 服務注冊發現(客戶端)依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- nacos-config 配置中心依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--spring-cloud-dependencies 2020.0.0 版本不在默認加載bootstrap.yml 文件,如果需要加載bootstrap 文件需要手動添加依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--loadbalancer ,負載均衡,用來替代ribbon的組件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency><!-- sentinel流量控制,必須加上后降級和限流才會生效--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies>
</project>

application.yml 內容如下

server:port: 8089
spring:# 后面的bean會覆蓋前面相同名稱的beanmain:allow-bean-definition-overriding: true# 激活Sentinel對Feign的支持,默認為false。必須設為true后sentinel降級才會生效
feign:sentinel:enabled: true

bootstrap.yml 內容如下,bootstrap.yml 文件比 application.yml 先加載,主要用于存放一些不會改變的配置,application.yml 存放一些經常需要改動的配置;

spring:application:name: user-demoprofiles:active: yexindong_activecloud:nacos:discovery:server-addr: chn520.cn:8848 # 服務注冊中心地址namespace: public # 注冊到nacos的名稱空間,默認為publicconfig:prefix: yexindong_nacos_prefixfile-extension: yaml  # 指定yaml格式的配置, 必須要放到bootstrao.yml 才會生效,放到application下不會生效server-addr: chn520.cn:8848 #配置中心地址group: DEFAULT_GROUP

父項目的 pom.xml 文件加入modules

   <modules><module>spring-cloud-alibaba-2021-user</module></modules>

新建啟動類 UserApp.java

package com.alibaba.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients  // // 開啟feign遠程調用
public class UserApp {public static void main(String[] args) {SpringApplication.run(UserApp.class, args);}
}

新建controller層 UserController.java

package com.alibaba.cloud.controller;import com.alibaba.cloud.feign.OrderClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope // 不重啟即可刷新 nacos配置
@RequestMapping("/user")
public class UserController {// 調用order遠程服務@RequestMapping("/getOrder")public String getOrder(){return orderClient.getOrderById();}
}

遠程調用接口 OrderClient.java

package com.alibaba.cloud.feign;import com.alibaba.cloud.feign.fallback.OrderFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;/*** value : 其他遠程服務的名稱,對應配置文件的 spring.application.name 值* name: 和value功能一樣* path : url前綴,和 @RequestMapping 注解功能類似* fallback : 降級回調的實現類,當被調服務不可用、發生異常或者超時會直接走降級邏輯,返回友好提示*/
@FeignClient(value="order-demo",path = "order",fallback = OrderFallback.class)
public interface OrderClient {@GetMapping("/getOrderById")String getOrderById();
}

添加降級回調類 OrderFallback.java

package com.alibaba.cloud.feign.fallback;import com.alibaba.cloud.feign.OrderClient;
import org.springframework.stereotype.Component;/*** 降級回調類*/
@Component
public class OrderFallback implements OrderClient {public String getOrderById() {return "order服務暫時不可用!!!";}
}

此時 項目結構如下

創建第二個項目 spring-cloud-alibaba-2021-order (被調者)

新建工程,起名為 spring-cloud-alibaba-2021-order

pom.xml 文件內容如下

<?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-alibaba-2021</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>spring-cloud-alibaba-2021-order</artifactId><dependencies><!-- springweb 啟動依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- nacos 服務注冊發現(客戶端)依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- nacos-config 配置中心依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--spring-cloud-dependencies 2020.0.0 版本不在默認加載bootstrap.yml 文件,如果需要加載bootstrap 文件需要手動添加依賴--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--loadbalancer ,負載均衡,用來替代ribbon的組件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>
</project>

application.yml 內容如下

server:port: 8088
spring:# 后面的bean會覆蓋前面相同名稱的beanmain:allow-bean-definition-overriding: true

bootstrap.yml 內容如下

spring:application:name: order-demoprofiles:active: yexindong_activecloud:nacos:discovery:server-addr: chn520.cn:8848 # 服務注冊中心地址namespace: public # 注冊到nacos的名稱空間,默認為publicconfig:prefix: yexindong_nacos_prefixfile-extension: yaml  # 指定yaml格式的配置, 必須要放到bootstrao.yml 才會生效,放到application下不會生效server-addr: chn520.cn:8848 #配置中心地址group: DEFAULT_GROUP

啟動類 OrderApp.java 內容如下

package com.alibaba.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients  // // 開啟feign遠程調用
public class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class, args);}
}

controller層 OrderController.java 內容如下

package com.alibaba.cloud.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope // 不重啟即可刷新 nacos配置
@RequestMapping("/order")
public class OrderController {@Value("${cache:default}")private String cache;@RequestMapping("/getOrderById")public String getOrderById(){return "yexindong order" + cache;}
}

此時項目結構如下

修改 nacos 配置,添加 yexindong_nacos_prefix-yexindong_active.yaml文件
此時會打開新建配置的頁面,

  1. DataId 輸入:yexindong_nacos_prefix-yexindong_active.yaml
  2. 配置格式 選擇: YAML
  3. 配置內容 中輸入:cache: hello openFeign sentinal!!! `
  4. 點擊 右下角的 發布 按鈕

測試

啟動 OrderApp.java 和 UserApp.java 中的main方法,一會后發現這2個服務已經注冊到nacos了

在瀏覽器輸入 http://localhost:8089/user/getOrder,可以正常訪問

測試熔斷降級

接下來我們修改一下OrderController.java中的 getOrderById() 方法,增加一行代碼,System.out.println(1/0); 讓程序在運行中拋出異常,修改后的內容如下

    @RequestMapping("/getOrderById")public String getOrderById(){System.out.println(1/0);return "yexindong order" + cache;}

然后重啟 orderApp ,再次訪問 http://localhost:8089/user/getOrder,發現已經出發了熔斷,返回了falllback 的友好提示

配置 openFeign 日志

有時候我們遇到bug,接口調用失敗、參數沒收到等問題,或者想看看調用性能,就需要配置OpenFeignde的日志了,以此讓openFeign把請求信息輸出來。

OpenFeign提供了日志打印功能,我們可以通過配置來調整日恙級別,從而了解Feign 中 Http請求的細節。

日志級別

  • NONE:默認的,不顯示任何日志;
  • BASIC:僅記錄請求方法、URL、響應狀態碼及執行時間;
  • HEADERS:除了BASIC中定義的信息之外,還有請求和響應的頭信息;
  • FULL:除了HEADERS中定義的信息之外,還有請求和響應的正文及元數據;
全局配置

添加 OpenFeignConfig.java 文件,內容如下

package com.alibaba.cloud.config;
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 全局配置:當使用@Configuration 會將配置作用所有的服務提供方* 局部配置:如果只想針對某一個服務進行配置,就不要加@Configuration*/
@Configuration
public class OpenFeignConfig {/*日志級別:NONE:默認的,不顯示任何日志;BASIC:僅記錄請求方法、URL、響應狀態碼及執行時間;HEADERS:除了BASIC中定義的信息之外,還有請求和響應的頭信息;FULL:除了HEADERS中定義的信息之外,還有請求和響應的正文及元數據;*/@Beanpublic Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}

application.yml加上以下配置

#  openfeign配置包下(或指定哪些業務接口)以什么日志級別監聽,springboot的默認日志級別是info,openFeign的日志級別debug就不會輸出,所以需要加上此配置
logging:level:com:alibaba:cloud:feign: debug

重新請求后就可以在控制臺打印日志了;

局部配置:方式一

直接在接口上指定,在@FeignClient注解加上configuration = OpenFeignConfig.class屬性

package com.alibaba.cloud.feign;import com.alibaba.cloud.feign.fallback.OrderFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;/*** value : 其他遠程服務的名稱,對應配置文件的 spring.application.name 值* name: 和value功能一樣* path : url前綴,和 @RequestMapping 注解功能類似* fallback : 降級回調的實現類,當被調服務不可用、發生異常或者超時會直接走降級邏輯,返回友好提示*/
@FeignClient(value="order-demo",path = "order",fallback = OrderFallback.class,configuration = OpenFeignConfig.class)
public interface OrderClient {@GetMapping("/getOrderById")String getOrderById();
}

注意:這種方式需要將OpenFeignConfig.java類的@Configuration注解去掉,否則會變成全局配置

局部配置:方式二

application.yml 添加以下配置

# openfeign日志局部配置
feign:client:config:order-demo:loggerLevel: basic

超時時間配置

方式一:添加配置類

創建配置類 OpenFeignTimeOutConfig.java,內容如下

package com.alibaba.cloud.config;import feign.Request;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class OpenFeignTimeOutConfig {/*** 超時時間配置* @return*/@Beanpublic Request.Options options(){// Options 的第一個參數是連接的超時時間(ms),默認值是 2s;第二個是請求處理的超時時間(ms),默認值是 5s。return new Request.Options(5000,10000);}
}
方式二:配置文件修改

application.yml 添加配置

feign:client:config:order-demo:# 配置指定服務連接超時(單位:ms)connectTimeout: 5000# 配置指定服務等待超時(單位:ms)readTimeout: 5000default:# 配置所有服務的連接超時時間(單位:ms)connectTimeout: 5000# 配置所有服務的等待超時時間(單位:ms)readTimeout: 5000

自定義攔截器

全局配置

添加攔截器類CustomFeignInterceptor.java

package com.alibaba.cloud.interceptor;import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;/*** 自定義feign攔截器*/
@Configuration
public class CustomFeignInterceptor implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {System.out.println("執行openFeign自定義攔截器");}
}
局部配置

如果寫在配置文件中指明了服務,則為具體的服務指定一個或者多個攔截器, 在 application.yml 加入以下內容

# 在配置文件中設置feign攔截器
feign:client:config:order-demo:# openFeign攔截器requestInterceptors[0]: com.alibaba.cloud.interceptor.CustomFeignInterceptor

再次請求http://127.0.0.1:8089/user/getOrder發現已經打印了攔截器的內容

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

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

相關文章

網絡安全威脅——APT攻擊_apt攻擊預測案例

APT攻擊 1. 基本概念2. APT的攻擊階段3. APT的典型案例參考 1. 基本概念 高級持續性威脅&#xff08;APT&#xff0c;Advanced Persistent Threat&#xff09;&#xff0c;又叫高級長期威脅&#xff0c;是一種復雜的、持續的網絡攻擊&#xff0c;包含高級、長期、威脅三個要…

順時針旋轉N * N 的矩陣

順時針旋轉題目描述數據范圍實現邏輯代碼實現題目描述 有一個NxN整數矩陣&#xff0c;請編寫一個算法&#xff0c;將矩陣順時針旋轉90度。給定一個NxN的矩陣&#xff0c;和矩陣的階數N,請返回旋轉后的NxN矩陣。數據范圍 0<n<300&#xff0c;矩陣中的值滿足 0≤val≤100…

原生C++實現信號與槽機制:原理詳解

信號與槽機制是一種廣泛應用于事件驅動系統和GUI框架&#xff08;如Qt&#xff09;的設計模式。它允許組件之間通過訂閱-發布模式進行通信&#xff0c;從而實現松耦合的設計。本文將詳細講解如何在原生C中從零開始實現信號與槽機制&#xff0c;并深入探討其工作原理。一、信號與…

【人工智能】OpenAI的AI代理革命:通向超擬人交互的未來之路

人工智能代理(AI Agent)正引領一場深刻的技術變革,其核心在于賦予AI系統感知、規劃、行動和學習的能力,以自主完成復雜任務。OpenAI作為這一領域的先驅,通過其大型語言模型(LLMs)如GPT系列,極大地推動了AI代理的發展,使其在自然語言理解、生成和工具使用方面達到了前所…

Ubuntu虛擬機介紹、命令、安裝軟件指令(一)

Ubuntu介紹 Ubuntu 是一個基于 Debian 的開源 Linux 操作系統&#xff0c;由 Canonical 公司贊助開發。它是目前全球最流行的 Linux 發行版之一&#xff0c;以其用戶友好性、穩定性和強大的社區支持著稱。 核心特性 1.免費開源 完全免費使用和分發&#xff0c;遵循 GNU GPL…

企業微信服務商創建第三方應用配置數據回調url和指令回調url的java代碼實現

關鍵區別說明&#xff08;指令回調 vs 數據回調&#xff09;特性指令回調數據回調觸發場景授權/取消授權等管理事件通訊錄變更、應用菜單點擊等業務事件關鍵字段InfoTypeEvent ChangeType典型事件suite_auth, cancel_authchange_contact, suite_ticket響應要求必須返回加密的&…

LazyLLM教程 | 第2講:10分鐘上手一個最小可用RAG系統

貼心小梗概本文將介紹使用LazyLLM搭建最基礎的RAG的流程。首先介紹使用LazyLLM搭建RAG系統的必要環境配置&#xff0c;然后簡單回顧RAG的基本流程&#xff0c;接下來分別介紹RAG中文檔加載、檢索組件、生成組件三個關鍵部分的參數和基本使用方法&#xff0c;最后利用LazyLLM實現…

android9-PMS-常見問題及分析步驟

以下是基于 Android 9 的 Package Manager Service (PMS) 常見問題及分析步驟&#xff0c;結合系統原理與優化實踐整理&#xff1a; &#x1f527; 一、開機性能問題 現象 開機時間隨應用增多顯著延長&#xff0c;卡在“正在啟動應用”階段。 分析步驟 ① 確認掃描階段耗時adb…

生成模型實戰 | GLOW詳解與實現

生成模型實戰 | GLOW詳解與實現0. 前言1. 歸一化流模型1.1 歸一化流與變換公式1.2 RealNVP 的通道翻轉2. GLOW 架構2.1 ActNorm2.2 可逆 11 卷積2.3 仿射耦合層2.4 多尺度架構3. 使用 PyTorch 實現 GLOW3.1 數據處理3.2 模型構建3.3 模型訓練0. 前言 GLOW (Generative Flow) 是…

行業案例:杰和科技為智慧教育構建數字化硬件底座

清晨8點10分&#xff0c;深圳某學生踏入校園&#xff0c;智慧門閘識別身份&#xff0c;并同步發給家長&#xff1b;走廊里的“智慧班牌”向他們展示今日的課表&#xff1b;課堂上&#xff0c;教室前方的多媒體播放器里&#xff0c;老師引導學生學習“居民樓消防隱患”知識&…

Redis與MySQL數據同步:從“雙寫一致性”到實戰方案

Redis與MySQL數據同步&#xff1a;從“雙寫一致性”到實戰方案 在分布式系統中&#xff0c;Redis作為高性能緩存被廣泛使用——它能將熱點數據從MySQL中“搬運”到內存&#xff0c;大幅降低數據庫壓力、提升接口響應速度。但隨之而來的核心問題是&#xff1a;當MySQL數據更新時…

Java源碼構建智能名片小程序

在移動互聯網時代&#xff0c;紙質名片的局限性日益凸顯——信息更新不便、客戶管理困難、營銷效果難以追蹤。智能電子名片小程序以其便捷、高效、智能的特點&#xff0c;正成為商務人士的"數字營銷門戶"。而基于Java技術棧開發的智能名片系統&#xff0c;憑借其穩定…

如何在短時間內顯著提升3D效果圖渲染速度?

在建筑設計、游戲開發、影視制作等行業&#xff0c;3D效果圖的渲染速度是項目進度與效率的關鍵瓶頸。面對復雜場景時&#xff0c;漫長的渲染等待尤為突出。要在保證質量的前提下大幅縮短渲染時間&#xff0c;以下優化策略至關重要&#xff1a; 1. 升級硬件配置&#xff1a;渲染…

配置daemon.json使得 Docker 容器能夠使用服務器GPU【驗證成功】

&#x1f947; 版權: 本文由【墨理學AI】原創首發、各位讀者大大、敬請查閱、感謝三連 文章目錄&#x1f50d;你遇到的錯誤&#xff1a;&#x1f50d; 根本原因? 解決方案&#xff1a;正確安裝 NVIDIA Container Toolkit? 第一步&#xff1a;卸載舊版本&#xff08;如果存在&…

Linux 系統進程管理與計劃任務詳解

Linux 系統進程管理與計劃任務詳解 一、程序與進程的基本概念 程序&#xff1a;保存在外部存儲介質中的可執行機器代碼和數據的靜態集合。進程&#xff1a;在CPU及內存中處于動態執行狀態的計算機程序。關系&#xff1a;每個程序啟動后&#xff0c;可創建一個或多個進程。 二、…

【圖像處理】直方圖均衡化c++實現

直方圖均衡化是一種通過調整圖像像素灰度值分布&#xff0c;來增強圖像對比度的經典數字圖像處理技術。其核心在于將原始圖像的灰度直方圖從集中的某個區間“拉伸”或“均衡”到更廣泛的區間&#xff0c;讓圖像的明暗細節更清晰&#xff0c;關鍵在于利用累積分布函數實現灰度值…

Web前端實戰:Vue工程化+ElementPlus

1.Vue工程化 1.1介紹 模塊化&#xff1a;將js和css等&#xff0c;做成一個個可復用模塊組件化&#xff1a;我們將UI組件&#xff0c;css樣式&#xff0c;js行為封裝成一個個的組件&#xff0c;便于管理規范化&#xff1a;我們提供一套標準的規范的目錄接口和編碼規范&#xff0…

ECMAScript2021(ES12)新特性

概述 ECMAScript2021于2021年6月正式發布&#xff0c; 本文會介紹ECMAScript2021(ES12)&#xff0c;即ECMAScript的第12個版本的新特性。 以下摘自官網&#xff1a;ecma-262 ECMAScript 2021, the 12th edition, introduced the replaceAll method for Strings; Promise.any,…

Tlias 案例-整體布局(前端)

開發流程前端開發和后端開發是一樣的&#xff0c;都需要閱讀接口文檔。 準備工作&#xff1a; 1&#xff1a;導入項目中準備的基礎過程到 VsCode。2&#xff1a;啟動前端項目&#xff0c;訪問該項目3&#xff1a;熟悉一下基本的布局<script setup></script><tem…

三十二、【Linux網站服務器】搭建httpd服務器演示虛擬主機配置、網頁重定向功能

httpd服務器功能演示一、虛擬主機配置虛擬主機技術全景虛擬主機目錄規范1. 基于端口的虛擬主機&#xff08;8080/8081&#xff09;2. 基于IP的虛擬主機&#xff08;192.168.1.100/192.168.1.101&#xff09;3. 基于域名的虛擬主機&#xff08;site1.com/site2.com&#xff09;二…