java - Java 异步 api 调用 - 触发并忘记 http 调用
问题描述
我有一个java spring boot api(数据接收器),客户端要求保留一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(它应该处理持久化的数据 - 数据聚合器),它应该自己异步运行,原始程序应该在简单地调用数据聚合器后终止。我不希望数据接收器在完成之前等待数据聚合器完成。它需要是一种火灾类型,并且忘记对 http url 的 api 调用。你能建议如何去做吗?
解决方案
我已经根据上述建议和spring.io得出了以下解决方案
自己的类中的公共异步方法
@Service
public class CallAggrAsync
{
@Async
public void fireandforgetrag()
{
try
{
URL myurl = new URL("http://myurl.com");
URLConnection myconn = myurl.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
myconn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
catch(Exception e)
{
System.out.println("Error firing or forgetting: "+e);
}
}
}
我们打开 EnableAsync 的 Application.java
@SpringBootApplication
@EnableAsync
public class Application
{
public static void main(final String args[])
{
SpringApplication.run(Application.class);
}
@Bean
public Executor asyncExecutor()
{
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("Async-");
executor.initialize();
return executor;
}
}
我调用上面的异步方法
@Service
public class Persist
{
@Autowired private CallAggrAsync asy;
public boolean somefunc()
{
//do some work
asy.fireandforgetrag("server",hostname);
//do some more work which will continue running without waiting for above
function to finish
}
}
推荐阅读
- jsf - 无法使用 primefaces 上传文件上传文件
- android - 如何在 Kotlin 中创建对象列表?
- swift - 在 stringdict 文件中使用 \n
- reactjs - 在使用 YUP 的电子邮件验证中只允许 ASCII 字符
- python - sklearn.exceptions.NotFittedError:此管道实例尚未安装。在使用此估算器之前使用适当的参数调用“fit”
- mulesoft - 如何与 mulesoft 流设计器一起睡觉
- c++ - Clickhouse 没有线性扩展 CPU 超过 28 个线程
- java - Facebook Audience Network 广告未展示,但测试广告正在展示
- libreoffice - LibreOffice Calc Range Max 和删除宏
- javascript - Material UI 选项,取回选项的值