wordpress網(wǎng)站發(fā)布時(shí)間網(wǎng)絡(luò)推廣求職招聘交流群
文章目錄
- 引言
- 使用 OkHttp 發(fā)送回調(diào)
- 其他
引言
記錄一下 OkHttp 的使用;OkHttp 異步發(fā)送回調(diào)請(qǐng)求,增加回調(diào)失敗重試。
使用 OkHttp 發(fā)送回調(diào)
/*** 回調(diào)重試類*/
@Data
public class CallBackRetryData {/*** 回調(diào)信息JSON*/private JSONObject bodyRequest;/*** 回調(diào)發(fā)送地址*/private String url;/*** 重試次數(shù)*/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();/*** 回調(diào)重試隊(duì)列*/private final Queue<CallBackRetryData> VERIFY_QUEUE = new LinkedList<>();/*** 構(gòu)造回調(diào)信息*/public void buildCallBackData() {JSONObject bodyRequest = new JSONObject();bodyRequest.put("userId", "123456789");CallBackRetryData retryData = new CallBackRetryData(bodyRequest, "https://發(fā)送回調(diào)地址", 1);sendCallBack(retryData);}/*** 異步發(fā)送回調(diào)*/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("[回調(diào)失敗][call:{}]", e.getMessage());// 回調(diào)次數(shù)+1retryData.setTime(retryData.getTime() + 1);// 放入驗(yàn)證隊(duì)列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("[回調(diào)失敗][狀態(tài)碼錯(cuò)誤:{}]", callBackData);// 回調(diào)次數(shù)+1retryData.setTime(retryData.getTime() + 1);// 放入驗(yàn)證隊(duì)列VERIFY_QUEUE.offer(retryData);}}});}/*** 每分鐘檢查一次*/@Scheduled(cron = "0 0/1 * * * ? ")public void execute() {// 執(zhí)行超時(shí)驗(yàn)證隊(duì)列while (VERIFY_QUEUE.size() > 0) {CallBackRetryData retryData = VERIFY_QUEUE.poll();// 重新發(fā)送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使用