最新要闻
- 相当差劲!中汽研公布新一批碰撞测试:合创Z03仅获三星
- 博主称餐厅虚假营销:抓起帝王蟹扯腿吃掉
- 世界通讯!十年N饭称AMD显卡驱动有一个优点 就是不太稳定
- 全球消息!轻松瓦解重油污 奥妙桂花青梅香型洗洁精4 x 1.1KG 29.9元
- 鹤岗铁路开通运营:“绿巨人”开到中国最北端!时速160公里
- 比304更昂贵的316L不锈钢 富光真空保温杯年末清仓:多款式多容量可选
- 当前信息:清幽雅致 索泰RTX 4080 AMP EXTREME AIRO月白图赏
- 焦点播报:豪华超跑质感!Redmi K60冠军版官宣
- 焦点精选!英国工程师警告:电动车可能导致停车场坍塌 原因意想不到
- 全球新动态:荣耀平板V8 Pro预装MagicOS 7.0 赵明:跨设备非常强 将与苹果竞争
- 天天微头条丨我国成功发射高分十一号04星 首次实现中继星数据双向高速互传
- 太阴间了!荷兰一车企推出特斯拉Model 3定制灵车
- 环球热头条丨荣耀赵明:荣耀笔记可记录瞬间灵感 未来将在多端流转
- 焦点速讯:2.4折发车:361° 新款休闲老爹鞋99元官方大促
- 谷歌旗舰Pixel 7遭品控问题:带壳使用后摄玻璃依旧碎裂
- 焦点热议:驾校学车被撞伤获赔23万 学员用不用担责?法院如此判决
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球今亮点!Gateway
Gateway—SpringCloud微服务网关组件
一、Spring Cloud Gateway简介
1.为什么要用Gateway?
在微服务架构中,通常一个系统会被拆分为多个微服务,微服务之间的调用可以用OpenFeign,但面对这么多微服务客户端调用会遇到哪些问题呢?
【资料图】
每个服务都需要鉴权、限流、跨域访问、权限验证等操作,如果每个微服务各自为战,会很麻烦。
对于客户端来说,每个微服务都分配一个域名的话,客户端代码会很难维护,而且连接数也会有瓶颈.
随着一个项目的微服务的增多,后期对微服务进行重构的话,也会变的非常麻烦,需要客户端配合一起修改。
2、Spring Cloud Gateway 的定义
为了解决上面的问题,微服务引入了 网关 的概念,网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。
Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。
简单来说:Gateway相当于医院大厅的挂号台,对病人进行引流。
加入网关后结构图:
3.Spring Cloud Gateway三大组成部分
Route(路由): 是构建网关的基本模型, 由ID ,URI 一系列的断言和过滤器组成。
Predicate (断言): 可以匹配Http 请求中所有的内容(请求头 参数等等) 请求与断言,相匹配则通过当前断言。
Filter(过滤器): 包括全局和局部过滤器 ,可以在请求被路由钱后对请求进行更改。
二、Spring Cloud Gateway快速入门
前面我们学习过Nacos,可以帮助我们管理我们的服务,学习Spring Cloud Gateway时,我们可以直接将Nacos整合进来。
1.项目项目
复制之前的Sentinel项目,在此基础上添加api-gateway子模块
添加入口类
2.添加Jar包
org.springframework.cloud spring-cloud-starter-gateway org.springframework.cloud spring-cloud-starter-loadbalancer com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.projectlombok lombok com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.springframework.cloud spring-cloud-starter-bootstrap 3.0.2
3.添加配置文件
GATEWAY-dev.yml
server: port: 9000spring: application: name: GATEWAY cloud: loadbalander: #注意这里要排除ribbon ribbon: enable: false gateway: routes: - id: search_route uri: lb://SEARCH predicates: - Path=/search-service/** filters: - StripPrefix=1
注解: http://localhost:9000/search-service/goods http://localhost:8083/goods
routes: 路由/路由数组 当请求满足指定的条件后转发到哪个微服务上id: 当前路由唯一的标识符 ,有默认值,也可以自定义uri: 请求最终要被转到的地址 ,lb为load balance,表示负载均衡,比如lb://SEARCH表示请求最终会转发到SEARCH服务,注意 lb://后面的一定不要使用下划线,即不要使用比如:my_service这种形式,否则LoadBanancer不会起作用。predicates:断言,也就是条件判断,- Path=/search-service/表示当客户端访问 http://localhost:9000/search-service/goods时会路由到http://localhost:8083/search-service/goods(我这里的SEARCH路径地址为http://localhost:8083),这个无法访问,需要filters过滤下filters: 过滤器,在请求传递过程中,对请求做一下处理,比如添加请求头,去掉部分路径等。- StripPrefix=1表示转发之前去掉第一层路由,也就是转发到http://localhost:8083/goods
4.添加bootstrap.yml文件
spring: cloud: nacos: discovery: server-addr: http://localhost:8848 config: server-addr: http://localhost:8848 namespace: dev group: DEFAULT_GROUP username: nacos password: nacos prefix: GATEWAY file-extension: yml shared-configs: - common.yml config: activate: on-profile: dev
5.启动
6.测试:
7.也可以直接拿nacos服务名为断言
修改GATEWAY-dev.yml配置信息为:
server: port: 9000spring: application: name: GATEWAY cloud: nacos: discovery: server-addr: localhost:8848 loadbalander: ribbon: enable: false gateway: discovery: locator: enabled: true
spring.cloud.gateway.discovery.locator.enabled=true,表示会拿nacos服务名为断言,也会将服务名进行过滤,从而路由到该服务的请求。所以访问:http://localhost:9000/SEARCH/goods 会路由到http://localhost:8083/goods
三、 断言
断言就是在进入网关请求之前所做的操作,也就是先执行的程序,和生活中坐车一样,首先必须进行安检,然后查票,验证票最终才可以坐车。
在这里的理解就是:当满足某种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。
1.内置断言
Spring Cloud Gateway可以匹配各种路由,而其内部就包括许多内置的路由断言工厂。所有这些断言都匹配HTTP请求的不同属性。您可以将多个路由断言工厂与逻辑和语句组合在一起使用。
1.1、基于Path路径: Path Route Predicate
Path是最常见的断言请求,匹配指定路径下的请求,可以是具体的请求,也可使用/**表示匹配所有子级请求,配置如下。
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/**
配置中匹配了以/search-service开头的请求,如果是其他URL的请求进入系统,会出现错误。
1.2、基于DateTime类型:DateTimePredicate(匹配请求时间)
After Route Predicate(匹配时间后的请求)After Route Predicate可以匹配ZonedDateTime类型的时间,表示:匹配在指定日期时间之后发生的请求,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - After=2022-07-8T14:00:00+08:00[Asia/Shanghai]
配置中匹配了2022-07-8 14:00:00后的请求,如果是在指定时间之前进入系统的请求,会出现错误。
Before Route Predicate(匹配时间前的请求)Before Route Predicate可以匹配ZonedDateTime类型的时间,表示:匹配在指定日期时间之前发生的请求,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - Before=2022-07-8T14:00:00+08:00[Asia/Shanghai]
配置中匹配了2022-07-8 14:00:00之前的请求,如果是在指定时间之后进入系统的请求,会出现错误。
Between Route Predicate(匹配时间之间的请求)Between Route Predicate可以匹配ZonedDateTime类型的时间,由两个ZonedDateTime参数组成,第一个参数为开始时间,第二参数为结束时间,表示:匹配在指定的开始时间与结束时间之内发生的请求,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - Between=2022-07-8T14:00:00+08:00[Asia/Shanghai],2022-07-28T14:00:00+08:00[Asia/Shanghai]
配置中匹配2022-07-8 14:00:00到2022-07-28 14:00:00之内时间段的请求,如果是在指定时间段外的进入系统的请求,会出现错误。
1.3、基于Cookie:Cookie Route Predicate
CookieRoutePredicate由两个参数组成,第一个参数为cookie的Key,第二参数为cookie的Value,表示:匹配指定名称且其值与正则表达式匹配的cookie的请求,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - Cookie=cookieName, \d+
配置中匹配了cookie的Key为cookieName,值为满足\d+的正则表达式请求,如果满足cookieName不满足\d+的请求,会出现错误。
1.4、基于Header:Header Route Predicate
HeaderRoutePredicate由两个参数组成,第一个参数为Header名称,第二参数为Header的Value值,表示:匹配指定名称且其值与正则表达式匹配的Header的请求,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - Header=X-Request-Id, \d+
配置中匹配了Header的名称为X-Request-Id,值为满足\d+的正则表达式请求,如果满足headerName不满足\d+的请求,会出现错误。
1.5、基于Host:Host Route Predicate
HostRoutePredicate参数为请求的Host地址,多个参数使用逗号分割,设置的Host地址可以使用**表示通配符,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Host=**.test1.com,**.test2.com
配置中匹配的Host,可以匹配以test1.com或者test2.com结尾的Host地址,其他Host地址访问会出现错误。
1.6、基于请求方法:Method Route Predicate
MethodRoutePredicate由一个或多个HTTP Method组成,比如:POST、PUT、GET、DELETE,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - Method=GET,POST
配置中匹配了HTTP Method的类型为GET和POST,如果是其他类型的HTTP Method,会出现错误。
1.7、Query Route Predicate
QueryRoutePredicate由两个参数组成,第一个参数为参数名称,第二参数为参数的值(满足正则即可),表示:匹配指定名称且其值与正则表达式匹配的带参的请求,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - Query=name,\d+
配置中匹配了参数名称叫做name,值满足\d+的请求,如果不满足\d+,会出现错误。
1.8、基于远程地址:RemoteAddr Route Predicate
RemoteAddrRoutePredicate的参数由CIDR 表示法(IPv4 或 IPv6)字符串组成,配置如下:
spring: cloud: gateway: routes: - id: after_route uri: lb://SEARCH predicates: - Path=/search-service/** - RemoteAddr=192.168.1.1/24
配置中可以匹配IP为192.168.1.1–192.168.1.254的值,如果不满足192.168.1.1/24的IP规则,会出现错误。
1.9、基于路由权重:Weight Route Predicate
WeightAddrRoutePredicate由group和weight(权重数值)组成,表示将相同的请求根据权重跳转到不同的uri地址,要求group的名称必须一致,配置如下:
spring: cloud: gateway: locator: enabled: true routes: -id: weight_route1 uri: lb://SEARCH predicates: - Path=/weight/** - Weight= group3, 1 -id: weight_route2 uri: lb://USERS predicates: - Path=/weight/** - Weight= group3, 9
如上配置了两个对于 / weight/** 路径转发的路由定义,这两个路由是同一个权重分组,且 weight_ route1 权重为 1, weight_ route2 权重为9。 对于10个访问/ weight/** 路径的请求来说,将会有9个路由到 weight_ route2,1个路由到 weight_ route1。
2.自定义断言
假设我们需要对访问的用户年龄做限制,只允许18-60岁之间的人来访问。我们可以自己定义断言来实现
2.1 新建一个路由断言工厂MyAgeRoutePredicateFactory
package com.test.apigateway.Predicate;import com.alibaba.cloud.commons.lang.StringUtils;import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;import org.springframework.stereotype.Component;import org.springframework.util.MultiValueMap;import org.springframework.validation.annotation.Validated;import org.springframework.web.server.ServerWebExchange;import java.util.Arrays;import java.util.List;import java.util.function.Consumer;import java.util.function.Predicate;@Component// 自定义路由断言工厂public class MyAgeRoutePredicateFactory extends AbstractRoutePredicateFactory { public MyAgeRoutePredicateFactory() { super(MyAgeRoutePredicateFactory.Config.class); } // 将配置文件中的值按返回集合的顺序,赋值给配置类 @Override public List shortcutFieldOrder() { return Arrays.asList(new String[]{"minAge", "maxAge"}); } @Override public Predicate apply(Consumer consumer) { return super.apply(consumer); } @Override public Predicate apply(Config config) { // 创建网关断言对象 return new Predicate() { // 检查 @Override public boolean test(ServerWebExchange serverWebExchange) { // 获取请求参数age,判断是否满足[18, 60) MultiValueMap queryParams = serverWebExchange.getRequest().getQueryParams(); String age = queryParams.getFirst("age"); if (!StringUtils.isEmpty(age) && age.matches("[0-9]+")) { int iAge = Integer.parseInt(age); if (iAge >= config.minAge && iAge < config.maxAge) { return true; } } return false; } }; } // 配置类,属性用于接收配置文件中的值 @Validated public static class Config { private int minAge; private int maxAge; public int getMinAge() { return minAge; } public void setMinAge(int minAge) { this.minAge = minAge; } public int getMaxAge() { return maxAge; } public void setMaxAge(int maxAge) { this.maxAge = maxAge; } }}
要求:
类必须要加上RoutePredicateFactory作为结尾
类必须继承AbstractRoutePredicateFactory
必须声明静态内部类。
2.2 添加Gateway配置信息
gateway: routes: - id: myage uri: lb://SEARCH predicates: - Path=/search-service/** - MyAge=18,60 filters: - StripPrefix=1
MyAge即是我们新建断言工厂的前缀名,自动识别的。
2.3 测试
四、过滤器
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。
1.过滤器生命周期
PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
2.局部过滤器
2.1 局部过滤器有哪些?
是指作用在某一个路由上,SpringCloud Gateway内置了很多路由过滤器,他们都是由GatewayFilter的工厂类产生。
2.2 局部过滤器怎么使用
比如AddRequestParameter GatewayFilter
该过滤器可以给请求添加参数。
比如我在SEARCH服务有一个带有page参数的接口,我想请求网关路由转发的时候给加上一个page=1的参数。
接口如下:
添加配置信息:
测试
再比如前面用过的- StripPrefix=1,表示把请求网关的路径前缀的第一级去掉。
内置过滤器很多,我们这里举一个例子看一下使用方式,其它的可以看帮助手册
https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
3.全局过滤器
全局过滤器在系统初始化时就作用于所有的路由,不需要单独去配置。全局过滤器的接口定义类是GlobalFilter,Gateway本身也有很多内置的过滤器。
比如LoadBalancerClientFilter
该过滤器会解析到以lb://开头的uri,比如这样的配置:
gateway: routes: - id: abc uri: lb://SEARCH predicates: - Path=/search-service/** filters: - StripPrefix=1 - AddRequestParameter=page,1
它会使用Spring Cloud的LoadBalancerClient 来将 SEARCH服务解析成实际的host和port,重新组装请求的url。
它是作用于全局,而且并不需要配置。
五、Gateway实现日志记录
启用Reactor Netty访问日志:-Dreactor.netty.http.server.accessLogEnabled=true
测试:
六、Gateway整合Sentinel实现流控
1.Gateway如何整合Sentinel
1.1.添加jar包
com.alibaba.cloud spring-cloud-starter-alibaba-sentinel com.alibaba.cloud spring-cloud-alibaba-sentinel-gateway
1.2.添加配置信息
sentinel: transport: port: 8888 dashboard: http://localhost:8080
1.3.测试
启动Sentinel,重启网关微服务,运行一次服务中的接口,再次刷新Sentinel,会出现以下内容,表示整合成功
2.网关限流
从1.6.0版本开始,Sentinel提供了SpringCloud Gateway的适配模块,可以提供两种资源维度的限流:
route维度:即在配置文件中配置的路由条目,资源名为对应的routeId,这种属于粗粒度的限流,一般是对某个微服务进行限流。
自定义API维度:用户可以利用Sentinel提供的API来自定义一些API分组,这种属于细粒度的限流,针对某一类的uri进行匹配限流,可以跨多个微服务。
2.1 路由维度
这里的Burst size是指:应对突发请求时额外允许的请求数目。
还可以设置针对断言的请求属性:
2.2 API分组维度
添加API分组:
对当前分组限流:
测试:
属于API分组的路由被限流
不在分组内的不受影响
环球今亮点!Gateway
相当差劲!中汽研公布新一批碰撞测试:合创Z03仅获三星
博主称餐厅虚假营销:抓起帝王蟹扯腿吃掉
世界通讯!十年N饭称AMD显卡驱动有一个优点 就是不太稳定
全球消息!轻松瓦解重油污 奥妙桂花青梅香型洗洁精4 x 1.1KG 29.9元
鹤岗铁路开通运营:“绿巨人”开到中国最北端!时速160公里
比304更昂贵的316L不锈钢 富光真空保温杯年末清仓:多款式多容量可选
当前信息:清幽雅致 索泰RTX 4080 AMP EXTREME AIRO月白图赏
焦点播报:豪华超跑质感!Redmi K60冠军版官宣
焦点热议:AcWing361. 观光奶牛
即时:10 种超好用的 MyBatis 写法,同事都说好用!
焦点!【记录贴】项目经理的进阶日常:靠年终总结获得了核心项目的机会
Atcoder Grand Contest AGC 060 D Same Descent Set 题解 (容斥,多项式)
焦点精选!英国工程师警告:电动车可能导致停车场坍塌 原因意想不到
全球新动态:荣耀平板V8 Pro预装MagicOS 7.0 赵明:跨设备非常强 将与苹果竞争
天天微头条丨我国成功发射高分十一号04星 首次实现中继星数据双向高速互传
太阴间了!荷兰一车企推出特斯拉Model 3定制灵车
环球热头条丨荣耀赵明:荣耀笔记可记录瞬间灵感 未来将在多端流转
Java基本数据类型
环球焦点!易基因|深度综述:癌症中RNA修饰机制的遗传和表观遗传失调(m6A+m1A+m5C+ψ)
焦点速讯:2.4折发车:361° 新款休闲老爹鞋99元官方大促
谷歌旗舰Pixel 7遭品控问题:带壳使用后摄玻璃依旧碎裂
焦点热议:驾校学车被撞伤获赔23万 学员用不用担责?法院如此判决
环球热讯:奔驰GLS国产平替 北京越野BJ90山河经典版上市:47.80万起
第五章 --------------------加载和编译XAML
天天短讯!Netty中8大组件详解(EventLoop、Channel、ChannelFuture、Future、 Promise、Handler 、 Pipe
全球热点!贯穿汽车用户全生命周期,火山引擎数智平台能帮车企做这些事!
全球播报:当项目经理看世界杯决赛时…
在Windows中利用WSL2安装禅道17.7
观热点:纽约州进入紧急状态 美国暴风雪有多可怕?官方告诫市民别出门否则会冻死
快消息!稳住iPhone 14 Pro 富士康给员工发留任奖金:最高5000元
黑客携4亿推特用户数据勒索马斯克:想破财消灾还是被罚款?
世界看点:驾特斯拉Model X车祸 5个多月林志颖仍在康复:期待复工
一家三口发烧用洋葱退热成功 医生科普:低烧有用、高烧不建议
【全球新视野】工信部拟规定:APP应可便捷卸载 不得默认自动续订
当前关注:终于不用费劲算优惠了:天猫年货节取消跨店满减 直接降价
最新资讯:雷军刚投的激光雷达:120米以外就能探测到路面轮胎
环球讯息:李国庆称逃离北上广去二线商机无限 快反思降降价:看好杭州合肥长沙等
43mm大喇叭!荣耀亲选迪士尼便携蓝牙音箱上架 149元
天天讯息:从发现SQL注入到ssh连接
学习下Redis内存模型
环球观天下!更冷了!南方多地将有大到暴雪:湿冷“魔法攻击”来了
【世界独家】张艺谋新作 电影《满江红》官宣阵容:沈腾、易烊千玺双男主
每日热闻!专家:波司登万元羽绒服面料很低廉
焦点消息!文化输出网红要复出了?李子柒成子柒文化实控人:微念创始人退出公司
天天快讯:多语种录音转译!讯飞开放式办公耳机iFLYBUDS Air上市 899元
HTC G18上市价格是多少?HTC G18手机参数
小米3什么时候出的?小米3后盖怎么打开?
win7系统怎么设置防火墙?win7系统一键还原按哪个键?
显示器驱动程序停止响应的原因有哪些?电脑显示驱动程序出现问题怎么办?
洗衣机怎么消毒?洗衣机消毒方法有哪些?
科特迪瓦是哪个国家?科特迪瓦特产有哪些?
起初婚礼放鞭炮是为了什么?起初婚礼上放鞭炮是什么原因?
权力的游戏布兰为什么是夜王?权力的游戏布兰的结局是什么?
世界热门:Dubbo 可扩展性设计
Web前端--HTML+Canvas+Js实现3D魔方小游戏
世界观点:微信Native支付(扫码支付)商户配置
魔兽世界里RN是什么意思?魔兽世界RN含义解释
天仙配电视剧大结局是什么?天仙配电视剧演员表
巧克力中的劳斯莱斯是什么牌子?巧克力中的劳斯莱斯多少钱?
淘宝金币有什么用处?淘宝金币怎么抵扣现金?
女生坐位体前屈满分多少厘米?女生坐位体前屈的技巧有哪些?
冯小宁战争三部曲是哪三部?冯小宁战争三部曲观看顺序
春眠不觉晓处处蚊子咬下一句是什么?春眠不觉晓改编打油诗
每日快报!年度必看神作!《阿凡达2》全球票房破9亿美元:内地破7.3亿
3排8座拉全家 路虎卫士130国内预售:119.8万起
新突破!我国建成首个年产500亿立方米特大型产气区
环球观天下!学AMD大涨价!Intel B760新一代平民主板来了 华硕等最快本周出货:涨幅不小
【快播报】教程干货!JNPF快速搭建库存管理与财务管理板块
天天热门:马斯克被曝架子大:访客等1个小时才能见人 还不能先开口
世界热点!“更适合国内路况”的CLTC新标准 为啥更坑“电动爹”了?
今日热搜:PC玩家狂喜:PS3模拟器已可运行所有PS3游戏
一瓶的钱现在买3件!杰威尔男士护肤套装大促:原价100多现在30包邮
环球今日讯!顾客吐槽看《阿凡达2》需30元购3D眼镜 凭啥买非常不合理:影院回应
【环球快播报】【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"阳了"的评论
Python爬虫实战,requests+tqdm模块,爬取漫画之家漫画数据(附源码)
上海一车主至少5次倒车撞击后车:后车特斯拉全程不动 网友吐槽
热门:《三体》动画口碑直降!豆瓣跌破6分 网友发现人脸模型重复利用
讯息:5MHz处理器+128MB内存:成功运行Win7旗舰版
天天百事通!2022年度七大叫好又叫座游戏 看完手痒别怪我
观察:苹果中国开启新年福利:iPhone 13等降价优惠千元!
当前速看:Ubuntu下的NVIDIA显卡【驱动&CUDA 安装与卸载】
韩国报告首例“食脑虫”病例:一天即死亡、不会人传人
快报:葛优母亲施文心去世:享年94岁 从事电影文学编辑30年
【环球新视野】《西游记之七十二变》终极预告:孙悟空、牛魔王一起学法术
每日讯息!EPIC喜加一:国产之光3A游戏《暗影火炬城》免费送 省了108元
RTX 4070 Ti跑分偷跑:怎么灭掉了RTX 3090 Ti!
滚动:在虚幻引擎中使用蓝图实现简单的对话
每日视讯:Wi-Fi 6路由杀到169元 荣耀路由X4 Pro发布:三个千兆网口
世界新消息丨豆瓣2022年度电影榜单出炉:《阿凡达2》入榜
天天热资讯!虚假新闻检测(MAC)《Hierarchical Multi-head Attentive Network for Evidence-aware F
天天讯息:Atcoder Beginner Contest ABC 283 Ex Popcount Sum 题解 (类欧几里得算法)
环球微资讯!一群环保人士 为何想限制游戏发展?
热资讯!首发199元 荣耀手环7发布:1.47英寸大屏 支持全天候血氧监测
韩国人造肉需求激增:近一半韩国年轻人买过吃过人造肉
02年小伙3年打6份工买车 正能量感染网友:送过外卖、做过服务员等
首发5680元 汉王N10 Max墨水平板发布:13.3英寸大屏
微头条丨失业率最高的西班牙:开始薅中国羊毛
短讯!JMeter
第四章 --------------------XAML名称空间