maven依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.1.1</version>
</dependency>
1.线程类 负责处理业务
package com.callme.account.center.common.utils;
/**
* Created with IDEA
* author:CMY
* Date:2021/11/02
* Time:10:28
*/
public class AsyncThread extends Thread{
private String thirdOrderNo = "";
private String callback = "";
public AsyncThread(String thirdOrderNo,String callback){
this.thirdOrderNo = thirdOrderNo;
this.callback = callback;
}
// 重写run方法
@Override
public void run() {
sendMsg();
super.run();
}
// 回调接口的创建,里面要有一个回调方法
public interface Calls {
public void call(String resultMsg);
}
// 回调接口的对象
public Calls calls;
// 执行线程的具体方法
private void sendMsg() {
try {
// 业务请求处理
String callBackUrl = callback;
String succes = HttpAsyncClientsUtils.main(thirdOrderNo,callBackUrl);
// 把请求结果返回到回调接口的call方法里面
if (calls!=null) {//实例化callPhone对象,相当于提前定义好实现回调的模板
//执行接口实现后的方法
calls.call(succes);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.http请求封装类
package com.callme.account.center.common.utils;
import cn.hutool.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.CountDownLatch;
/**
* Created with IDEA
* author:CMY
* Date:2021/11/02
* Time:10:28
*/
public class HttpAsyncClientsUtils {
public static String main(String thirdOrderNo,String callBackUrl) throws UnsupportedEncodingException {
final String[] resData = new String[1];
CloseableHttpAsyncClient client = HttpAsyncClients.createDefault();
client.start();
final CountDownLatch latch = new CountDownLatch(1);
final HttpPost post = new HttpPost(callBackUrl);
// String param1="userId="+thirdOrderNo;
JSONObject param2= new JSONObject();
param2.put("thirdOrderNo", thirdOrderNo);
//设置请求头 这里根据个人来定义
post.addHeader("Content-type", "application/json; charset=utf-8");
post.setHeader("Accept", "application/json");
// post.setHeader("Content-type", "application/x-www-form-urlencoded");//url传参
StringEntity stringEntity = new StringEntity(param2.toString());//
post.setEntity(stringEntity);
//执行
client.execute(post, new FutureCallback<HttpResponse>() {
//执行异步操作 请求完成后
@Override
public void completed(final HttpResponse response) {
latch.countDown();
//响应内容
int a = response.getStatusLine().getStatusCode();
// System.out.println("状态码:"+a);
if (a == 200) {
HttpEntity entity = response.getEntity();
try {
resData[0] = EntityUtils.toString(entity);
} catch (IOException e) {
e.printStackTrace();
}
// System.out.println("发送成功!");
} else {
try {
//输出响内容
System.out.println(response.getStatusLine().getStatusCode()
+ " " + EntityUtils.toString(response.getEntity(), "UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
//请求失败处理
@Override
public void failed(final Exception ex) {
latch.countDown();
}
//请求取消后处理
@Override
public void cancelled() {
latch.countDown();
}
});
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//关闭
try {
client.close();
} catch (IOException ignore) {
}
return resData[0];
}
}
3.测试类
public void sendCallBack(String thirdOrderNo,String callback) {
AsyncThread asyncTask = new AsyncThread(thirdOrderNo,callback);
// 实例化回调接口的对象
AsyncThread.Calls call = new AsyncThread.Calls() {
@Override
public void call(String resultMsg) {
log.info("回调结果:"+resultMsg);
}
};
//给回调接口赋值匿名内部类实现
asyncTask.calls = call;
//执行异步线程
asyncTask.start();
}