首页 > 其他分享 >SpringBoot中HTTP高性能客户端实现

SpringBoot中HTTP高性能客户端实现

时间:2024-12-05 11:10:16浏览次数:7  
标签:HTTP SpringBoot java okhttp3 OkHttpClient new import public 客户端

目录

1、引入 OKHTTP 依赖

		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.12.0</version>
		</dependency>

2、配置 OkHttpClient 客户端实例

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

@Configuration
public class OkHttpConfiguration {

    @Bean
    public okhttp3.OkHttpClient okHttpClient() {
        final okhttp3.Dispatcher dispatcher = new okhttp3.Dispatcher();
        dispatcher.setMaxRequests(Integer.MAX_VALUE);
        dispatcher.setMaxRequestsPerHost(Integer.MAX_VALUE);

        return new okhttp3.OkHttpClient.Builder()
                .connectionPool(new okhttp3.ConnectionPool(200, 5L, TimeUnit.MINUTES))
                .dispatcher(dispatcher)
                .connectTimeout(2, TimeUnit.SECONDS)
                .readTimeout(3, TimeUnit.SECONDS)
                .build();
    }

}

3、请求调用

import okhttp3.*;
import org.jetbrains.annotations.NotNull;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

@RestController
public class IndexController {

    private final OkHttpClient okHttpClient;

    public IndexController(OkHttpClient okHttpClient) {
        this.okHttpClient = okHttpClient;
    }

    @GetMapping(path = "index", produces = MediaType.APPLICATION_JSON_VALUE)
    public Map<String, Object> execute(String arg) {
        final Map<String, Object> result = new HashMap<>(3);
        final Request request = new Request.Builder()
                .url("http://x.y.z/ivr/index")
                .post((new FormBody.Builder()).build())
                .build();

        final CompletableFuture<String> future = new CompletableFuture<>();
        this.okHttpClient.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                future.completeExceptionally(e);
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                if (response.isSuccessful()) {
                    future.complete(response.body().string());
                } else {
                    future.completeExceptionally(new IOException("Unexpected code " + response));
                }
            }

        });

        result.put("timestamp", LocalDateTime.now());
        result.put("arg", arg);
        final String futureResult;
        try {
            futureResult = future.get();
            result.put("txt", futureResult);
        } catch (InterruptedException | ExecutionException e) {
            result.put("txt", e.getMessage());
        }


        return result;
    }
}

标签:HTTP,SpringBoot,java,okhttp3,OkHttpClient,new,import,public,客户端
From: https://www.cnblogs.com/javalouvre/p/18588113

相关文章

  • 【最新原创毕设】基于SpringBoot的网上报修平台+94800(免费领源码)可做计算机毕业设计JA
    摘要随着信息技术的快速发展和普及,高校宿舍管理面临着诸多挑战与机遇。传统的宿舍管理模式,如手工记录报修信息、纸质文档管理等,已无法满足现代高校对效率和便捷性的需求。因此,开发一套高效、智能的网上报修平台显得尤为重要。基于springBoot的网上报修平台的设计和实现正......
  • 使用 httputils + protostuff 实现高性能 rpc
    1、先讲讲protostufprotostuf一直是高性能序列化的代表之一。但是用起来,可难受了,你得先申明protostuf配置文件,并且要把这个配置文件转成类。所以必然要学习新语法、新工具。可能真的太难受了!于是乎,(有不爽的人)搞了个有创意的框架protostuff(多一个字母“f”)。它借用注解,替代......
  • springboot毕设潮流数码社区系统程序+论文
    系统程序文件列表开题报告内容研究背景随着科技的飞速发展,数码产品已成为现代人生活中不可或缺的一部分。从智能手机到智能穿戴设备,从高清相机到高性能电脑,数码产品的种类和功能日益丰富,满足了人们多样化的需求。然而,面对琳琅满目的数码产品,消费者往往难以抉择,缺乏一个权威......
  • springboot毕设超市综合管理系统程序+论文
    系统程序文件列表开题报告内容研究背景在当今信息化高速发展的时代,各行各业都在积极拥抱数字化管理,以提高运营效率和服务质量。超市作为零售业的重要组成部分,其日常运营涉及大量的商品管理、员工调度、库存控制及财务记录等事务。传统的人工管理方式不仅耗时费力,还容易出错......
  • 宝塔安装证书后http访问错误
    1.检查防火墙设置检查防火墙规则:确保防火墙没有阻止80和443端口。使用以下命令查看防火墙状态:  sudoufwstatus允许80和443端口:如果防火墙阻止了80和443端口,可以添加规则允许它们:  sudoufwallow80/tcpsudoufwallow443/tcp......
  • 抓包Http/Https/Other数据包(小迪网络安全笔记~
    附:完整笔记目录~ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!2.1抓包Http/Https引子:上一章主要对当前常见的一些资产应用做了总结,而这些应用与用户/服务器/应用之间的交互行为都是通过网络数据包实现的。而之间使用最多的为Http/Https数据包,本篇则对不同应用Http......
  • 【SpringBoot】SpringBoot优雅停机机制
    文章目录背景1.什么是优雅停机?2.SpringBoot优雅停机的基础实现2.1立即停机模式2.2优雅停机模式3.核心机制解析3.1.启用ShutdownHook3.2.自定义资源释放逻辑3.3.超时机制4.优雅停机的实际应用场景4.1.服务更新4.2.流量调控4.3.订单处理5.优雅停机可能失......
  • springboot/ssm美食分享系统Java代码web项目美食烹饪笔记分享交流
    springboot/ssm美食分享系统ava美食烹饪笔记分享交流系统web美食源码基于springboot(可改ssm)+vue项目开发语言:Java框架:springboot/可改ssm+vueJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql5.7(或8.0)数据库工具:Navicat/sqlyog开发软件:eclipse/idea依赖管理包:Maven......
  • springboot/ssm二手书籍交易系统Java二手书商城购物系统web书籍源码
    springboot/ssm二手书籍交易系统Java二手书商城购物系统web书籍源码基于springboot(可改ssm)+vue项目开发语言:Java框架:springboot/可改ssm+vueJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql5.7(或8.0)数据库工具:Navicat/sqlyog开发软件:eclipse/idea依赖管理包:Maven......
  • springboot/ssm线上教育培训办公系统Java代码web项目在线课程作业源码
    springboot/ssm线上教育培训办公系统Java代码web项目在线课程作业源码基于springboot(可改ssm)+html+vue项目开发语言:Java框架:springboot/可改ssm+vueJDK版本:JDK1.8(或11)服务器:tomcat数据库:mysql5.7(或8.0)数据库工具:Navicat/sqlyog开发软件:eclipse/idea依赖管理......