当前位置: 首页 > news >正文

Java OkHttp使用(二)

文章目录

    • 引言
    • 使用 OkHttp 发送回调
    • 其他

引言

记录一下 OkHttp 的使用;OkHttp 异步发送回调请求,增加回调失败重试。

使用 OkHttp 发送回调

/*** 回调重试类*/
@Data
public class CallBackRetryData {/*** 回调信息JSON*/private JSONObject bodyRequest;/*** 回调发送地址*/private String url;/*** 重试次数*/private int time;public CallBackRetryData(JSONObject bodyRequest, String url, int time) {this.bodyRequest = bodyRequest;this.url = url;this.time = time;}
}
/*** HTTP 操作类*/
@Slf4j
@Service
public class HttpService {private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient().newBuilder().connectTimeout(1, TimeUnit.MINUTES).readTimeout(1, TimeUnit.MINUTES).writeTimeout(1, TimeUnit.MINUTES).build();/*** 回调重试队列*/private final Queue<CallBackRetryData> VERIFY_QUEUE = new LinkedList<>();/*** 构造回调信息*/public void buildCallBackData() {JSONObject bodyRequest = new JSONObject();bodyRequest.put("userId", "123456789");CallBackRetryData retryData = new CallBackRetryData(bodyRequest, "https://发送回调地址", 1);sendCallBack(retryData);}/*** 异步发送回调*/public void sendCallBack(CallBackRetryData retryData) {RequestBody requestBody = RequestBody.create(retryData.getBodyRequest().toJSONString(), MediaType.parse("application/json;charset=utf-8"));Request request = new Request.Builder().url(retryData.getUrl()).post(requestBody).addHeader("content-type", "application/x-www-form-urlencoded").build();OK_HTTP_CLIENT.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {log.error("[回调失败][call:{}]", e.getMessage());// 回调次数+1retryData.setTime(retryData.getTime() + 1);// 放入验证队列VERIFY_QUEUE.offer(retryData);}@Overridepublic void onResponse(Call call, Response response) throws IOException {String responseData = response.body().string();CallBackResponseData callBackData = JSONObject.parseObject(responseData, CallBackResponseData.class);if (callBackData.getCode() != 200) {log.error("[回调失败][状态码错误:{}]", callBackData);// 回调次数+1retryData.setTime(retryData.getTime() + 1);// 放入验证队列VERIFY_QUEUE.offer(retryData);}}});}/*** 每分钟检查一次*/@Scheduled(cron = "0 0/1 * * * ? ")public void execute() {// 执行超时验证队列while (VERIFY_QUEUE.size() > 0) {CallBackRetryData retryData = VERIFY_QUEUE.poll();// 重新发送if (retryData.getTime() <= 3) {try {log.info("[VERIFY_QUEUE][userId:{}][time:{}]",retryData.getBodyRequest().getString("userId"),retryData.getTime());sendBonusCallBack(retryData);} catch (Exception e) {log.error("[VERIFY_QUEUE error: {}]", e.getMessage());}}}}
}

其他

Java OkHttp使用

相关文章:

Java OkHttp使用(二)

文章目录 引言使用 OkHttp 发送回调其他 引言 记录一下 OkHttp 的使用&#xff1b;OkHttp 异步发送回调请求&#xff0c;增加回调失败重试。 使用 OkHttp 发送回调 /*** 回调重试类*/ Data public class CallBackRetryData {/*** 回调信息JSON*/private JSONObject bodyRequ…...

宝塔(bt.cn)面板新手小白使用中常见问题

1.新手小白-服务器正确的安装宝塔的粗略教程 购买服务器后首先是挂载磁盘再安装宝塔&#xff0c;步骤不要搞错,免得安全后磁盘空间不对需要挂载多免费异步&#xff0c;切记切记 挂载磁盘&#xff1a;&#xff08;挂载磁盘只需一行命令即可&#xff0c;请根据自己的系统选择正确…...

【LeetCode:3133】数组最后一个元素的最小值(Java)

题目链接 3133. 数组最后一个元素的最小值 题目描述 给你两个整数 n 和 x 。你需要构造一个长度为 n 的 正整数 数组 nums &#xff0c;对于所有 0 < i < n - 1 &#xff0c;满足 nums[i 1] 大于 nums[i] &#xff0c;并且数组 nums 中所有元素的按位 AND 运算结果为…...

FCARM - Output Name not specified, please check ‘Options for Target - Utilities‘解决方法

出现这个问题的原因是导入文件时默认类型选错了&#xff0c;修改文件类型即可 如图右键导入文件&#xff0c;选择“Options for File OLED.C” 选择“File Type”,将头文件文件类型修改为“Text Documents file”&#xff0c;将.c文件文件类型修改为“C Sorce file” 第二方…...

自行车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化

在当今这个日新月异的数字化时代&#xff0c;制造业正经历着前所未有的变革&#xff0c;自行车制造5G智能工厂工业物联数字孪生平台的兴起&#xff0c;无疑是这场转型浪潮中一股强劲力量。自行车制造5G智能工厂工业物联数字孪生平台的成功应用&#xff0c;不仅仅是技术上的突破…...

一文彻底搞懂Transformer - FFNN(前馈神经网络)

Transformer 神经网络&#xff1a; 神经网络&#xff08;Neural Networks&#xff09;是一种模仿生物神经网络的结构和功能的数学或计算模型。它由大量的人工神经元&#xff08;也称为节点或处理单元&#xff09;相互连接而成&#xff0c;这些神经元之间通过带有权重的连接进行…...

SpringCloud Gateway及 Springboot 服务 跨域配置

SpringCloud Gateway 跨域配置 配置文件 #跨域支持 spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-headers[0]* spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-methods[0]* spring.cloud.gateway.globalcors.cors-configuration…...

【Solidity】安全与校验

信息传输 发送方 A&#xff1a; 计算消息 message 的哈希值 H&#xff1a;hash(message) H 私钥 privateKey ➕ 哈希值 H &#x1f7f0; 签名 signature&#xff1a;signature sign(H, privateKey) 将消息 message 和签名 signature 发送给 B 接收方 B&#xff1a; 计算…...

黑神话悟空四十二项修改器 v1.0

软件简介 黑神话悟空四十二项修改器由风灵月影精心打磨&#xff0c;为《黑神话悟空》这款备受瞩目的游戏量身定制。这款修改器界面简洁、体积小巧、功能强大&#xff0c;它致力于为玩家提供便捷的游戏体验&#xff0c;让您能够根据个人喜好和需求&#xff0c;轻松调整游戏内的…...

RM电控RTOS

OS即&#xff08;operating system&#xff09;操作系统&#xff0c;比如我们常用的windows系统&#xff0c;mac系统&#xff0c;android系统&#xff0c;ios系统&#xff0c;linux系统等&#xff0c;都属于操作系统。操作系统的本质是一个特殊的软件&#xff0c;它直接管理硬件…...

Arduino开源四足蜘蛛机器人制作教程

视频教程&#xff1a;手把手叫你做四足蜘蛛机器人——1零件介绍_哔哩哔哩_bilibili 一、项目介绍 1.1 项目介绍 Arduino主控&#xff0c;图形化编程&#xff0c;趣味学习 Arduino nano开发板舵机扩展底板 4.8V可充电电池&#xff0c;支持Arduino C语言编程和米思齐图形化编程…...

【Axure高保真原型】中继器表格——标签使用情况案例

今天和大家分享中继器表格——标签使用情况案例的原型模板&#xff0c;效果包括&#xff1a; 模糊搜索——输入标签编号或者标签名称&#xff0c;可以快速查找对应的数据 排序——点击排序按钮&#xff0c;可以按升序或降序排列 分页——点击上拉列表&#xff0c;可以选择表格…...

ABAP字符串反转 and 寻找字符所在位置 and 根据数量汇总时把数量转为非数值类型

1.字符串反转 and 寻找字符所在位置 LOOP AT gt_wlmc ASSIGNING FIELD-SYMBOL(<fs_wlmc>). "遍历内表<fs_wlmc>-matnr <fs_wlmc>-matnr(8).DATA: l_output TYPE char50,v_off2 TYPE i,str TYPE i,str2 TYPE i.CALL FUNCTION STRING_REVERS…...

【机器学习第十二章——计算学习理论】

机器学习第十二章——计算学习理论 12.计算学习理论12.1 基础知识12.1 可能学习近似正确假设&#xff08;PAC&#xff09;12.3 有限假设空间12.4 VC维 12.计算学习理论 12.1 基础知识 从理论上刻画了若干类型的机器学习问题中的困难和若干类型的机器学习算法的能力 这个理论要…...

Docker私人学习笔记

俗话说“好记性不如烂笔头”&#xff0c;编程的海洋如此的浩大&#xff0c;养成做笔记的习惯是成功的一步&#xff01; 此笔记主要是antlr4.13版本的笔记&#xff0c;并且笔记都是博主自己一字一字编写和记录&#xff0c;有错误的地方欢迎大家指正。 一、基础概念&#xff1a;…...

谷粒商城实战笔记-233~235-商城业务-认证服务-单点登录流程-原理

文章目录 一&#xff0c;场景二&#xff0c;单点登录流程 一&#xff0c;场景 包含以下三节的内容&#xff1a; 一&#xff0c;233-商城业务-认证服务-单点登录流程-1二&#xff0c;233-商城业务-认证服务-单点登录流程-2三&#xff0c;233-商城业务-认证服务-单点登录流程-3…...

机器学习在旅游业的革新之旅

机器学习在旅游业的革新之旅 随着科技的飞速发展&#xff0c;尤其是人工智能&#xff08;AI&#xff09;技术的广泛应用&#xff0c;各个行业都迎来了前所未有的变革。其中&#xff0c;旅游业作为全球经济的重要支柱之一&#xff0c;更是受益匪浅。机器学习&#xff08;Machin…...

OpenCTI:开源网络威胁情报平台

OpenCTI 是一个开源平台&#xff0c;旨在帮助组织管理其网络威胁情报 (CTI) 数据和可观察数据。 该平台由 Filigran 开发&#xff0c;使用基于 STIX2 标准的知识模式构建数据。 它采用现代 Web 应用程序架构&#xff0c;配备 GraphQL API 和用户友好的前端。 OpenCTI 与 MIS…...

linux shell 脚本 let 数学计算

linux shell 脚本 let 数学计算 http://www.codebaoku.com/it-shell/ let命令中的算术表达式必须用双引号括起来&#xff0c;以避免解释器对特殊字符进行处理。 在变量的计算中&#xff0c;不需要使用$符号来表示变量&#xff0c; #!/bin/shweek_daydate %u echo $week_day…...

mp3和mp4的区别是什么?怎么把mp3转成mp4?(全)

在生活中我们或多或少会听到“mp3”和“mp4”&#xff0c;那么什么是mp3和mp4呢&#xff1f;mp3和mp4的区别是什么&#xff1f;mp3是一种音频压缩技术&#xff0c;旨在在不显著牺牲音质的前提下减小音频文件的体积&#xff0c;使其适用于音乐和其他音频内容的存储与传输。相比之…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...