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;二…