SpringBootRest服务调用

目录

RestTemplate

 依赖配置

 自定义RestTemplate

webCilent

 依赖配置

 自定义webCilent


springboot中有两种方式实现Rest远程服务调用,分别是RestTemplate与webCilent。下面分别介绍一下这两种方式。

RestTemplate

 依赖配置

RestTemplate是Spring Framework提供的一个用于进行RESTful风格的HTTP请求的客户端工具类。所以需要引入spring-boot-starter-web依赖。

    <!-- RestTemplate依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

根据 Spring Boot 自动配置规则可以知道 RestTemplate 的自动配置类为 RestTemplateAutoConfiguration,它同样被注册在新的 org.springframework.boot.autoconfigure.AutoConfiguration.imports 自动配置文件中,如下图所示:

 

 自定义RestTemplate

一般使用RestTemplateBuilder创建一个自定义的RestTemplate,可以设置请求、读取时间等。

@Bean
public RestTemplate defaultRestTemplate(RestTemplateBuilder restTemplateBuilder) {return restTemplateBuilder.setConnectTimeout(Duration.ofSeconds(5)).setReadTimeout(Duration.ofSeconds(5)).basicAuthentication("test", "test").build();
}

 通过实现并注册一个 RestTemplateCustomizer 接口的实例,实现附加其他的自定义配置。

 依赖配置:

<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId>
</dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId>
</dependency>

 代码块分享:

@Slf4j
@Component
public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {@Overridepublic void customize(RestTemplate restTemplate) {HttpRoutePlanner routePlanner = new CustomRoutePlanner(new HttpHost("proxy.javastack.cn"));RequestConfig requestConfig = RequestConfig.custom().build();HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setRoutePlanner(routePlanner).build();restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));}static class CustomRoutePlanner extends DefaultProxyRoutePlanner {CustomRoutePlanner(HttpHost proxy) {super(proxy);}@Overrideprotected HttpHost determineProxy(HttpHost target, HttpContext context) throws HttpException {log.info("hostName is {}", target.getHostName());if ("localhost".equals(target.getHostName())) {return null;}return super.determineProxy(target, context);}}}

webCilent

 依赖配置

与 RestTemplate 相比,WebClient 客户端的功能更强大,并且是完全基于响应式的。WebClient是Spring WebFlux模块中的一部分,并且适用于响应式编程。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

根据 Spring Boot 自动配置规则可以知道 WebClient 的自动配置类为 WebClientAutoConfiguration,它同样被注册在新的 org.springframework.boot.autoconfigure.AutoConfiguration.imports 自动配置文件中,如下图所示:

 

 自定义webCilent

可以通过WebClient.Builder来自定义WebClient的配置。下面代码创建了一个基于 Reactor Netty 的 ReactorClientHttpConnector 连接器,通过它来设置连接、读写超时时间,这是通过自定义 ClientHttpConnector 的方式来完全控制 Client 端的配置的,它会改变 WebClient.Builder 注册实例的默认配置,所以,如果需要使用这种方式构建多个不同配置的 WebClient 客户端,可以在修改前使用 builder.clone() 克隆一个新实例。

@Bean
public WebClient webClient(WebClient.Builder webClientBuilder) {HttpClient httpClient = HttpClient.create().tcpConfiguration(client ->client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3).doOnConnected(conn -> {conn.addHandlerLast(new ReadTimeoutHandler(3000));conn.addHandlerLast(new WriteTimeoutHandler(3000));}));ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);return webClientBuilder.clientConnector(connector).build();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492570.html

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

相关文章

DeepMind基础世界模型Genie:一张草图即为一个世界,通用AI智能体要来了?

一张草图即为一个世界&#xff01;Google DeepMind 推出了首个以无监督方式从未经标注的互联网视频中训练而来的生成交互环境模型——Genie。该模型可以通过文本、合成图像、照片甚至草图来生成无数种可玩&#xff08;动作可控&#xff09;的虚拟世界。 据介绍&#xff0c;Geni…

Python爬虫-爬取豆瓣高分电影封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权&#xff0c;请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 获取全部数据 def get_data():# 地址url "…

护眼台灯哪个牌子好?五大品牌,无广测评公开

自从护眼台灯出现之后&#xff0c;市场的热度就很高&#xff0c;许多家长都会给孩子准备上一盏护眼台灯&#xff0c;而随着护眼台灯越来越受欢迎&#xff0c;市面上品牌逐步越来越多。其中一些品牌为了压低价格&#xff0c;在选料和做工方面都很差&#xff0c;甚至会对视力造成…

3dmax怎么进行渲染通道图?

1、登录渲染100客户端&#xff0c;并找到优化工具箱&#xff0c;点击开启工具箱。 2、启动3Dmax&#xff0c;找到渲染100插件菜单&#xff0c;同样点击“开启工具箱”。 3、在“渲染菜单”里选择“通道渲染”。根据需求“勾选AO”和“色彩通道”&#xff0c;设置好文件输出路径…

黑马程序员Java面试专题(2)|并发编程篇(1)线程基础

指路&#x1f449; 黑马程序员Java面试专题&#xff08;1&#xff09;|常见集合篇&#xff08;1&#xff09;ArrayList&LinkedList-CSDN博客https://blog.csdn.net/YOYU_/article/details/135932520黑马程序员Java面试专题&#xff08;1&#xff09;|常见集合篇&#xff0…

C语言--贪吃蛇

目录 1. 实现目标2. 需掌握的技术3. Win32 API介绍控制台程序控制台屏幕上的坐标COORDGetStdHandleGetConsoleCursorinfoCONSOLE_CURSOR_INFOSetConsoleCursorInfoSetConsoleCursorPositionGetAsyncKeyState 4. 贪吃蛇游戏设计与分析地图<locale.h>本地化类项setlocale函…

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

BioTech - 大分子药物设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136302202 大分子药物设计领域主要包括3个方面&#xff0c;即大环类药物设计、蛋白质与多肽类药物设计、核酸药物设计等&#xff0c;具体如下&…

[linux][异常检测] hung task, soft lockup, hard lockup, workqueue stall

hung task&#xff0c;soft lockup&#xff0c;hard lockup&#xff0c;workqueue stall 是 linux 内核中的异常检测机制&#xff0c;这 4 个检测均是通过时间维度上的检测来判断异常。 在时间维度上的检测机制&#xff0c;有两个核心的点&#xff1a; &#xff08;1&#xff…

C语言设计超市管理系统

需求:超市中商品分为四类:食品、化妆品、日用品和饮料。每种商品包含条码号、商品名称、价格、库存和生产厂家、品牌、生产日期、保质期等信息。实现按条码号、商品名称、价格、品牌、库存、临期产品、过期产品查询的功能。实现对商品的销售、统计和新增、删除、补库存等简单…

inductive bias最详细解释

1.基本解释 inductive bias的基本含义是归纳偏置或归纳偏差&#xff0c;它是关于机器学习算法的目标函数的假设&#xff0c;也可以理解为模型的指导规则。 2.在机器学习中&#xff0c;inductive bias的意义和作用 具体来说&#xff0c;inductive bias是指机器学习算法在学习…

Centos7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…