1、前言

前面介绍了Spring Cloud 中的灵魂摆渡者Nacos,和它的前辈们相比不仅仅功能强大,而且部署非常简单。

今天介绍一款服务调用的组件:OpenFeign,同样是一款超越先辈(RibbonFeign)的狠角色。

文章目录如下:

图片

2、Feign是什么?

Feign也是一个狠角色,Feign旨在使得Java Http客户端变得更容易。

Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。

图片

但遗憾的是Feign现在停止迭代了,当然现在也是有不少企业在用。

有想要学习Feign的读者可以上spring Cloud官网学习,陈某这里也不再详细介绍了,不是今天的重点。

3、openFeign是什么?

前面介绍过停止迭代的Feign,简单点来说:OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

官网地址:https://docs.spring.io/spring-cloud-openfeign/docs/2.2.10.BUILD-SNAPSHOT/reference/html

4、Feign和openFeign有什么区别?

FeignopenFiegn
Feign是SpringCloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务OpenFeign 是SpringCloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等。OpenFeign 的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

5、环境准备

本篇文章Spring Cloud版本、JDK环境、项目环境均和上一篇Nacos的环境相同:五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强?。

注册中心就不再使用Eureka了,直接使用Nacos作为注册和配置中心,有不会的可以查看Nacos文章。

本篇文章搭建的项目结构如下图:

图片

注册中心使用Nacos,创建个微服务,分别为服务提供者Produce,服务消费者Consumer

6、创建服务提供者

既然是微服务之间的相互调用,那么一定会有服务提供者了,创建openFeign-provider9005,注册进入Nacos中,配置如下:

  1. server:
  2. port: 9005
  3. spring:
  4. application:
  5. ## 指定服务名称,在nacos中的名字
  6. name: openFeign-provider
  7. cloud:
  8. nacos:
  9. discovery:
  10. # nacos的服务地址,nacos-server中IP地址:端口号
  11. server-addr: 127.0.0.1:8848
  12. management:
  13. endpoints:
  14. web:
  15. exposure:
  16. ## yml文件中存在特殊字符,必须用单引号包含,否则启动报错
  17. include'*'

注意:此处的spring.application.name指定的名称将会在openFeign接口调用中使用。

项目源码都会上传,关于如何注册进入Nacos,添加什么依赖源码都会有,结合陈某上篇Nacos文章,这都不是难事!

7、创建服务消费者

新建一个模块openFeign-consumer9006作为消费者服务,步骤如下。

1、添加依赖

除了Nacos的注册中心的依赖,还要添加openFeign的依赖,如下:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>

2、添加注解@EnableFeignClients开启openFeign功能

老套路了,在Spring boot 主启动类上添加一个注解@EnableFeignClients,开启openFeign功能,如下:

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. @EnableFeignClients
  4. public class OpenFeignConsumer9006Application
  5. {
  6. public static void main(String[] args) {
  7. SpringApplication.run(OpenFeignConsumer9006Application.class, args);
  8. }
  9. }

3、新建openFeign接口

新建一个openFeign接口,使用@FeignClient注解标注,如下:

  1. @FeignClient(value = "openFeign-provider")
  2. public interface OpenFeignService {
  3. }

注意:该注解@FeignClient中的value属性指定了服务提供者在nacos注册中心的服务名

4、新建一个Controller调试

新建一个controller用来调试接口,直接调用openFeign的接口,如下:

  1. @RestController
  2. @RequestMapping("/openfeign")
  3. public class OpenFeignController {
  4. }

好了,至此一个openFeign的微服务就搭建好了,并未实现具体的功能,下面一点点实现。

8、openFeign如何传参?

开发中接口传参的方式有很多,但是在openFeign中的传参是有一定规则的,下面详细介绍。

1、传递JSON数据

这个也是接口开发中常用的传参规则,在Spring Boot 中通过@RequestBody标识入参。

provider接口中JSON传参方法如下:

  1. @RestController
  2. @RequestMapping("/openfeign/provider")
  3. public class OpenFeignProviderController {
  4. @PostMapping("/order2")
  5. public Order createOrder2(@RequestBody Order order){
  6. return order;
  7. }
  8. }

consumer中openFeign接口中传参代码如下:

  1. @FeignClient(value = "openFeign-provider")
  2. public interface OpenFeignService {
  3. /**
  4.      * 参数默认是@RequestBody标注的,这里的@RequestBody可以不填
  5.      * 方法名称任意
  6.      */
  7. @PostMapping("/openfeign/provider/order2")
  8. Order createOrder2(@RequestBody Order order);
  9. }

注意:openFeign默认的传参方式就是JSON传参(@RequestBody),因此定义接口的时候可以不用@RequestBody注解标注,不过为了规范,一般都填上。

2、POJO表单传参

这种传参方式也是比较常用,参数使用POJO对象接收。

provider服务提供者代码如下:

  1. @RestController
  2. @RequestMapping("/openfeign/provider")
  3. public class OpenFeignProviderController {
  4. @PostMapping("/order1")
  5. public Order createOrder1(Order order){
  6. return order;
  7. }
  8. }

consumer消费者openFeign代码如下:

  1. @FeignClient(value = "openFeign-provider")
  2. public interface OpenFeignService {
  3. /**
  4.      * 参数默认是@RequestBody标注的,如果通过POJO表单传参的,使用@SpringQueryMap标注
  5.      */
  6. @PostMapping("/openfeign/provider/order1")
  7. Order createOrder1(@SpringQueryMap Order order);
  8. }

网上很多人疑惑POJO表单方式如何传参,官方文档明确给出了解决方案,如下:

图片

openFeign提供了一个注解@SpringQueryMap完美解决POJO表单传参。

3、URL中携带参数

此种方式针对restful方式中的GET请求,也是比较常用请求方式。

provider服务提供者代码如下:

  1. @RestController
  2. @RequestMapping("/openfeign/provider")
  3. public class OpenFeignProviderController {
  4. @GetMapping("/test/{id}")
  5. public String test(@PathVariable("id")Integer id){
  6. return "accept one msg id="+id;
  7. }

consumer消费者openFeign接口如下:

  1. @FeignClient(value = "openFeign-provider")
  2. public interface OpenFeignService {
  3. @GetMapping("/openfeign/provider/test/{id}")
  4. String get(@PathVariable("id")Integer id);
  5. }

使用注解@PathVariable接收url中的占位符,这种方式很好理解。

4、普通表单参数

此种方式传参不建议使用,但是也有很多开发在用。

provider服务提供者代码如下:

  1. @RestController
  2. @RequestMapping("/openfeign/provider")
  3. public class OpenFeignProviderController {
  4. @PostMapping("/test2")
  5. public String test2(String id,String name){
  6. return MessageFormat.format("accept on msg id={0},name={1}",id,name);
  7. }
  8. }

consumer消费者openFeign接口传参如下:

  1. @FeignClient(value = "openFeign-provider")
  2. public interface OpenFeignService {
  3. /**
  4.      * 必须要@RequestParam注解标注,且value属性必须填上参数名
  5.      * 方法参数名可以任意,但是@RequestParam注解中的value属性必须和provider中的参数名相同
  6.      */
  7. @PostMapping("/openfeign/provider/test2")
  8. String test(@RequestParam("id") String arg1,@RequestParam("name") String arg2);
  9. }

5、总结

传参的方式有很多,比如文件传参.....陈某这里只是列举了四种常见得传参方式。

9、超时如何处理?

想要理解超时处理,先看一个例子:我将provider服务接口睡眠3秒钟,接口如下:

  1. @PostMapping("/test2")
  2. public String test2(String id,String name) throws InterruptedException {
  3. Thread.sleep(3000);
  4. return MessageFormat.format("accept on msg id={0},name={1}",id,name);
  5. }

此时,我们调用consumer的openFeign接口返回结果如下图:

图片

很明显的看出程序异常了,返回了接口调用超时。what?why?...........

openFeign其实是有默认的超时时间的,默认分别是连接超时时间10秒、读超时时间60秒,源码在feign.Request.Options#Options()这个方法中,如下图:

图片

那么问题来了:为什么我只设置了睡眠3秒就报超时呢?

其实openFeign集成了Ribbon,Ribbon的默认超时连接时间、读超时时间都是是1秒,源码在org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer#execute()方法中,如下图:

图片

源码大致意思:如果openFeign没有设置对应得超时时间,那么将会采用Ribbon的默认超时时间。

理解了超时设置的原理,由之产生两种方案也是很明了了,如下:

  • 设置openFeign的超时时间

  • 设置Ribbon的超时时间

1、设置Ribbon的超时时间(不推荐)

设置很简单,在配置文件中添加如下设置:

  1. ribbon:
  2. # 值的是建立链接所用的时间,适用于网络状况正常的情况下, 两端链接所用的时间
  3. ReadTimeout: 5000
  4. # 指的是建立链接后从服务器读取可用资源所用的时间
  5. ConectTimeout: 5000

2、设置openFeign的超时时间(推荐)

openFeign设置超时时间非常简单,只需要在配置文件中配置,如下:

  1. feign:
  2. client:
  3. config:
  4. ## default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
  5. default:
  6. connectTimeout: 5000
  7. readTimeout: 5000

default设置的是全局超时时间,对所有的openFeign接口服务都生效

但是正常的业务逻辑中可能涉及到多个openFeign接口的调用,如下图:

图片

上图中的伪代码如下:

  1. public T invoke(){
  2. //1. 调用serviceA
  3. serviceA();
  4. //2. 调用serviceA
  5. serviceB();
  6. //3. 调用serviceA
  7. serviceC();
  8. }

那么上面配置的全局超时时间能不能通过呢?很显然是serviceAserviceB能够成功调用,但是serviceC并不能成功执行,肯定报超时。

此时我们可以给serviceC这个服务单独配置一个超时时间,配置如下:

  1. feign:
  2. client:
  3. config:
  4. ## default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
  5. default:
  6. connectTimeout: 5000
  7. readTimeout: 5000
  8. ## 为serviceC这个服务单独配置超时时间
  9. serviceC:
  10. connectTimeout: 30000
  11. readTimeout: 30000

注意:单个配置的超时时间将会覆盖全局配置。

10、如何开启日志增强?

openFeign虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别。

openFeign的日志级别如下:

  • NONE:默认的,不显示任何日志;

  • BASIC:仅记录请求方法、URL、响应状态码及执行时间;

  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

  • FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

配置起来也很简单,步骤如下:

1、配置类中配置日志级别

需要自定义一个配置类,在其中设置日志级别,如下:

图片

注意:这里的logger是feign包里的。

2、yaml文件中设置接口日志级别

只需要在配置文件中调整指定包或者openFeign的接口日志级别,如下:

  1. logging:
  2. level:
  3. cn.myjszl.service: debug

这里的cn.myjszl.service是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口。

3、演示效果

上述步骤将日志设置成了FULL,此时发出请求,日志效果如下图:

图片

日志中详细的打印出了请求头、请求体的内容。

11、如何替换默认的httpclient?

Feign在默认情况下使用的是JDK原生的URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用HTTP的persistence connection。

在生产环境中,通常不使用默认的http client,通常有如下两种选择:

  • 使用ApacheHttpClient

  • 使用OkHttp

至于哪个更好,其实各有千秋,我比较倾向于ApacheHttpClient,毕竟老牌子了,稳定性不在话下。

那么如何替换掉呢?其实很简单,下面演示使用ApacheHttpClient替换。

1、添加ApacheHttpClient依赖

在openFeign接口服务的pom文件添加如下依赖:

  1. <!--     使用Apache HttpClient替换Feign原生httpclient-->
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.github.openfeign</groupId>
  8. <artifactId>feign-httpclient</artifactId>
  9. </dependency>

为什么要添加上面的依赖呢?从源码中不难看出,请看org.springframework.cloud.openfeign.FeignAutoConfiguration.HttpClientFeignConfiguration这个类,代码如下:

上述红色框中的生成条件,其中的@ConditionalOnClass(ApacheHttpClient.class),必须要有ApacheHttpClient这个类才会生效,并且feign.httpclient.enabled这个配置要设置为true

2、配置文件中开启

在配置文件中要配置开启,代码如下:

  1. feign:
  2. client:
  3. httpclient:
  4. # 开启 Http Client
  5. enabled: true

3、如何验证已经替换成功?

其实很简单,在feign.SynchronousMethodHandler#executeAndDecode()这个方法中可以清楚的看出调用哪个client,如下图:

图片

上图中可以看到最终调用的是ApacheHttpClient

4、总结

上述步骤仅仅演示一种替换方案,剩下的一种不再演示了,原理相同。

12、如何通讯优化?

在讲如何优化之前先来看一下GZIP 压缩算法,概念如下:

gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。

当GZIP压缩到一个纯文本数据时,效果是非常明显的,大约可以减少70%以上的数据大小。

网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是GZIP与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取GZIP文件来比普通手工抓取更快地检索网页。

GZIP压缩传输的原理如下图:

按照上图拆解出的步骤如下:

  • 客户端向服务器请求头中带有:Accept-Encoding:gzip,deflate 字段,向服务器表示,客户端支持的压缩格式(gzip或者deflate),如果不发送该消息头,服务器是不会压缩的。

  • 服务端在收到请求之后,如果发现请求头中含有Accept-Encoding字段,并且支持该类型的压缩,就对响应报文压缩之后返回给客户端,并且携带Content-Encoding:gzip消息头,表示响应报文是根据该格式压缩过的。

  • 客户端接收到响应之后,先判断是否有Content-Encoding消息头,如果有,按该格式解压报文。否则按正常报文处理。

openFeign支持请求/响应开启GZIP压缩,整体的流程如下图:

图片

上图中涉及到GZIP传输的只有两块,分别是Application client -> Application Service、 Application Service->Application client

注意:openFeign支持的GZIP仅仅是在openFeign接口的请求和响应,即是openFeign消费者调用服务提供者的接口。

openFeign开启GZIP步骤也是很简单,只需要在配置文件中开启如下配置:

  1. feign:
  2. ## 开启压缩
  3. compression:
  4. request:
  5. enabled: true
  6. ## 开启压缩的阈值,单位字节,默认2048,即是2k,这里为了演示效果设置成10字节
  7. min-request-size: 10
  8. mime-types: text/xml,application/xml,application/json
  9. response:
  10. enabled: true

上述配置完成之后,发出请求,可以清楚看到请求头中已经携带了GZIP压缩,如下图:

图片

13、如何熔断降级?

常见的熔断降级框架有HystrixSentinel,openFeign默认支持的就是Hystrix,这个在官方文档上就有体现,毕竟是一奶同胞嘛,哈哈...........

但是阿里的Sentinel无论是功能特性、简单易上手等各方面都完全秒杀Hystrix,因此此章节就使用openFeign+Sentinel进行整合实现服务降级。

说明:此处并不着重介绍Sentinel,陈某打算放在下一篇文章详细介绍Sentinel的强大之处。

1、添加Sentinel依赖

openFeign-consumer9006消费者的pom文件添加sentinel依赖(由于使用了聚合模块,不指定版本号),如下:

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  4. </dependency>

2、配置文件中开启sentinel熔断降级

要想openFeign使用sentinel的降级功能,还需要在配置文件中开启,添加如下配置:

  1. feign:
  2. sentinel:
  3. enabled: true

3、添加降级回调类

这个类一定要和openFeign接口实现同一个类,如下图:

图片

OpenFeignFallbackService这个是降级回调的类,一旦OpenFeignService中对应得接口出现了异常则会调用这个类中对应得方法进行降级处理。

4、添加fallback属性

@FeignClient中添加fallback属性,属性值是降级回调的类,如下:

  1. @FeignClient(value = "openFeign-provider",fallback = OpenFeignFallbackService.class)
  2. public interface OpenFeignService {}

5、演示

经过如上4个步骤,openFeign的熔断降级已经设置完成了,此时演示下效果。

通过postman调用http://localhost:9006/openfeign/order3这个接口,正常逻辑返回如下图:

图片

现在手动造个异常,在服务提供的接口中抛出异常,如下图:

图片

此时重新调用http://localhost:9006/openfeign/order3,返回如下图:

图片

哦豁,可以很清楚的看到服务已经成功降级调用,哦了,功能完成。

注意:实际开发中返回结果应该根据架构统一定制,陈某这里只是为了演示方便,不要借鉴,哈哈。。。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. MyBatis-Plus报错:### Error updating database. Cause: java.sql.SQLSyntaxErrorException: Column ‘x‘ spec

    MyBatis-Plus报错:### Error updating database. Cause: java.sql.SQLSyntaxErrorException: Column log_dtoClassSimpleName specified twice 解决: TableField("log_dtoClassSimpleName") 重复了......

    2024/4/14 13:05:51
  2. docker 容器中的文件导入导出

    首先我们是无法在docker直接执行 vim的命令 所以必须把 文件拷贝到linux主机中 下面是命令 docker cp a538:/etc/mysql/mysql.conf.d/mysqld.cnf /root/mysqld.conf 修改完成之后 在拷贝回去 docker cp mysqld.conf a538:/etc/mysql/mysql.conf.d/mysqld.cnf...

    2024/4/14 13:05:56
  3. 基于SSM水果商城,前端jsp,数据库MySQL

    基于SSM水果商城&#xff0c;前端jsp&#xff0c;数据库MySQL 环境&#xff1a;开发工具&#xff1a;idea&#xff0c;数据库&#xff1a;MySQL5.7 jdk1.8 Tomcat8.5 架构&#xff1a;后端ssm&#xff0c;前端jsp 主要功能&#xff1a; 用户&#xff1a;查看商品、添加收藏、购…...

    2024/4/14 13:05:46
  4. 第一次训练赛解题报告

    我训练赛中做出4题, 赛后补4题, 最终使用word完成解题报告, 报告上呈现出9题. 补题数量: 8/ 10. 收获感悟:这次训练赛是对我们从寒假开始上的课的一个总结,感觉自己学的一点都不扎实,前缀和差分的知识很简单,但是一遇到具体题目结合起来就令我显得十分吃力,自己基础不牢,做题…...

    2024/4/20 16:00:39
  5. 2021年高压电工模拟考试题库及高压电工理论考试

    题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;高压电工模拟考试题库是安全生产模拟考试一点通生成的&#xff0c;高压电工证模拟考试题库是根据高压电工最新版教材汇编出高压电工仿真模拟考试。2021年高压电工模拟考试题库及高…...

    2024/4/7 5:10:59
  6. 一起学Python 2.1

    今天我们来学习Python中的循环语句 在日常生活中&#xff0c;类似一些重复进行的动作我们称为循环 循环有两种类型&#xff1a; 一种是重复一定次数的循环&#xff0c;称为计次循环&#xff0c;如for循环 一种是一直循环&#xff0c;直到不满足条件为止&#xff0c;称为条件…...

    2024/4/19 14:00:38
  7. 关于自从我对spring方面的知识尝试后的一些坑

    一开始尝试的是tomcat的部署和在idea中配置&#xff0c;所遇到的&#xff1a; 1、tomcat的startup.bat 和shutdown.bat 运行和关闭以及涉及的该端口和404 not find等等问题 2、最令人头疼的问题是 jdk和tomcat的版本不一致的问题 最好使用1.8 比较稳定 二者就是在projectStruct…...

    2024/4/14 13:10:06
  8. 注解@Data与@EqualsAndHashCode的爱恨情仇

    前言 Data相当于 GetterSetterRequiredArgsConstructorToStringEqualsAndHashCode 这5个注解的合集。所以可知&#xff0c;当使用Data注解时&#xff0c;则有了EqualsAndHashCode注解&#xff0c;那么编译后就会自动重写equals() 和 hashCode()方法。用在一般的普通实体类不…...

    2024/4/19 17:03:23
  9. 内容协商,与content-type,httpMessageConverter

    1.content-type 是指 数据在 http网络通信的时候&#xff0c;字符串的类型 2.请求有 发送数据的 content-type,有 可以接收的content-type 3.而 编码格式&#xff0c;只是 这个字符串里面的 字符的 编码格式&#xff0c;content-type是这个字符串的 类型 4.而有些特定的 需求 例…...

    2024/4/16 0:11:07
  10. 【每日一题】一起冲击蓝桥杯吧——Day2【蓝桥真题】

    断更要努力补&#xff01; 观察下面的加法算式: 其中&#xff0c;相同的汉字代表相同的数字&#xff0c;不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字&#xff08;答案唯一&#xff09; 分析一下吧~ 首先我们读完题&#xff0c;可以发现&#xff0c;有八…...

    2024/4/14 13:05:16
  11. sqlserver2008 调试存储过程

    1、创建所需要调试的存储过程&#xff0c;并执行一下&#xff0c;也就是保存好 &#xff0c;我要演示的存储过程名是 “usp_Passport_GetNewDepositary” 2、找到存储过程&#xff0c;右键“执行存储过程”&#xff0c;会弹出如下的界面&#xff0c;要输入存储过程所用的参数 3…...

    2024/4/19 21:33:42
  12. Dynamics CRM: 查询字符串参数(Query String Parameters)的使用方法

    查询字符串参数(Query String Parameters)通常被用来传递自定义参数给表单上下文, 使用这些参数来设置某些字段的值, 或者试做一些判断的用处, 下面我就来说下它的用法: 1. 创建Query String Parameters a. Settings -> Customizations -> Customize the System b. En…...

    2024/4/18 4:53:16
  13. 工业组态图标库,可直接在组态王,博图,威纶通触摸屏,繁易触摸屏

    工业组态图标库&#xff0c;可直接在组态王&#xff0c;博图&#xff0c;威纶通触摸屏&#xff0c;繁易触摸屏&#xff0c;中达优控触摸屏&#xff0c;显控触摸屏&#xff0c;昆仑通态触摸屏&#xff0c;顾美触摸屏等中使用 符号工厂 Symbol Factory 3.0 全新图库 多格式支持 高…...

    2024/4/14 13:06:12
  14. 什么是多态?多态的具体有哪些?

    文章目录1. 多态2. 多态具体体现3. 代码示例4.结果5.原因1. 多态 方法或对象具有多种形态&#xff0c;是OOP&#xff08;面向对象的编程&#xff09;的三大特征&#xff0c; 是建立在封装和继承基础之上。2. 多态具体体现 方法多态 &#xff08;1&#xff09;重载体现多态 &…...

    2024/4/19 14:12:54
  15. CSDN使用MD编辑器写博客如何让图片居中(调整图片位置)

    CSDN使用MD编辑器写博客如何让图片居中(调整图片位置&#xff09; ​CSDN使用MD编辑器调整图片位置是怎么回事呢&#xff1f;CSDN的MD编辑器相信大家都很熟悉&#xff0c;但是CSDN使用MD编辑器调整图片位置是怎么回事呢&#xff0c;下面就让小编带大家一起了解吧。 CSDN调整图…...

    2024/4/14 13:06:27
  16. 这个 SpringCloud 微服务商城值得推荐

    今天给小伙伴们推荐一个微信商城 一个基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统&#xff0c;采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等&#xff…...

    2024/4/14 13:06:27
  17. 搭建Tomcat文件服务器(url访问Linux服务器上的文件)

    说明&#xff1a; 通过tomcat搭建文件服务器&#xff0c;使用web浏览器下载服务器上的文件 一、安装tomcat 没啥可说的 二、配置server.xml文件夹 # 设置编码格式&#xff1a;URIEncoding"utf-8"<Connector port"8080" protocol"HTTP/1.1&quo…...

    2024/4/14 13:06:37
  18. 信息的整理

    指纹识别 网站指纹是 Web服务组件在开发时留下的类型、版本等标记信息,包括 Web服务器指纹、Web运用指纹及前端框架指纹等。 工具&#xff1a;wappalyzer(浏览器插件&#xff09;、在线指纹检测网站、御剑web指纹识别 waf识别 Web应用防护系统(也称为:网站应用级入侵防御系统。…...

    2024/4/20 15:56:43
  19. Javaweb 验证码功能实现

    思路 让浏览器每三秒刷新一次&#xff0c;通过refresh实现创建一个验证码图片 设置图片背景将数据渲染进图片 提供验证码中的数据 写一个生成随机数方法 关闭网站缓存用imageIO将图片写进浏览器 实现 package com.yang.servlet;import javax.imageio.ImageIO; import javax.…...

    2024/4/19 22:22:59
  20. CMake学习

    1. 引言 使用cmake管理SLAM工程很方便&#xff0c;编译便捷。 2. 具体学习 推荐《cmake实践》 1. MESSAGE在make时的输出&#xff1a; CMakeLists.txt内容 PROJECT (HELLO)SET(SRC_LIST main.c) MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR}) ME…...

    2024/4/16 10:59:49

最新文章

  1. Bentley二次开发教程27-交互窗口-界面开发方法

    界面设计概述 引言 在我们掌握了交互式工具的使用方法后&#xff0c;在使用过程中会发现&#xff1a;虽然工具中拥有多种交互的手段&#xff0c;但仅凭工具中鼠标&#xff0c;特殊按键与信息提示等交互方法&#xff0c;没有办法同时对多个信息进行展示&#xff0c;也不够直观…...

    2024/4/25 11:42:45
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 方案分享 | 嵌入式指纹方案

    随着智能设备的持续发展&#xff0c;指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势&#xff0c;被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域&#xff…...

    2024/4/23 6:15:34
  4. CentOS 7.9上安装Redis

    在CentOS 7.9上安装Redis通常涉及以下步骤&#xff1a; 下载Redis源代码&#xff1a; 首先&#xff0c;你需要从Redis官网或者使用Git克隆获取Redis的源代码。由于Redis通常不需要特定的操作系统版本&#xff0c;你可以使用任何版本的CentOS来安装Redis。 通过Git克隆源代码&am…...

    2024/4/22 10:32:40
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/23 20:58:27
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/23 13:30:22
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/23 13:28:06
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/24 18:16:28
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/23 13:27:44
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/19 11:57:53
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/23 13:29:53
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/23 13:27:22
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/23 13:28:42
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/23 22:01:21
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/23 13:29:23
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/19 11:59:23
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/19 11:59:44
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/24 16:38:05
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/23 13:28:14
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/23 13:27:51
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/23 13:27:19
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57