我们有一个解析excel的应用程序(大约100k),对于excel中的每一行,我们将调用4个不同的REST调用[在不同的域中],返回的输出存储在REDIS实例中以供进一步处理
1) 如果有100k条记录,我们将进行100k*4个REST API并行调用(50个线程并行),一条记录需要30秒才能完成整个过程。这似乎减慢了我们的进程,因此是否有其他替代框架(在java相关技术中会很有帮助)可以用来加快这个进程。
2) 由于REDIS是单线程的,我们按顺序插入数据,因此在该过程中需要更多的时间,是否有一种方法可以并行地从REDIS中放置和获取数据,或者是否有其他替代方法。
可以使用@Async
(https://spring.io/guides/gs/async-method/),也可以使用执行程序同时执行多个进程。以下是我对执行者的处理方式:
ExecutorService executor = Executors.newFixedThreadPool(nThreads);
List<FutureTask<Integer>> workersList = new ArrayList<FutureTask<Integer>>();
然后将新线程提交给执行者:
for (int i = 0; i < nRecords; i++) {
Worker worker = new Worker(args);
workersList.add(worker);
}
pool.shutdown(); // Disable new tasks from being submitted
while (!executor.isTerminated()) {
}
for (int i = 0; i < nRecords; i++) {
System.out.println(workersList.get(i).get());
}
你的工作线程应该实现可调用:
public class Worker implements Callable<Integer> (String[] args)
这真是件有趣的事,我脑海中突然Flink的一个解决方案是。
通过这样做,您的主服务将轻松地读取excel文件并将消息放入队列,您可以在放入队列之前使用标题来区分消息。如果您打算为不同类型的消息编写不同的服务,这些消息将从队列中使用,这将有所帮助。
我有一个非常基本的Spring Boot应用程序,它公开了一个非常简单的实体的CRUD Rest API。使用JMeter运行性能测试显示响应时间很差 约束:id PK自动增量 设置: 线程数:100 4个API,用于执行以下功能 我试图用可视化虚拟机查看原因。似乎存储库函数花费了太多时间。我假设是数据库导致了这个问题。 连接池设置:因为我没有设置任何内容,假设我的应用程序使用HikariCP,默
我已经为此挣扎了一段时间了。我想使用restAs0007来测试我的SpringBoot REST应用程序。 虽然看起来容器旋转得很好,但请放心(其他任何东西似乎都有问题。 一直以来我都被拒绝连接。 我的测试类: 现在,对于奇怪的部分,传递并打印它应该传递的内容,但是正在获得连接拒绝异常。 知道这个装置有什么问题吗?
我正在学习springboot并尝试连接到DB2数据库。我做得很好。 下面是我的工作DB2属性: 但我将它们重命名为以“db2”开头,而不是“Spring”,如下所示: 我的应用程序仍然运行,但是,当我这样做时,我的控制器不再像重命名前那样返回结果。 我这样问的原因是,如果我将来添加第二个数据源,如果我像这样命名它们,我可以很容易地通过它们的数据源来区分属性。 更新: 感谢下面的@Kosta Te
我想在应用程序启动时进行一次REST调用以检索一些配置参数。 例如,我们需要从另一个服务器检索一个名为FleetConfiguration的实体。我想做一次GET并保存,在运行时的其余时间将数据保存在内存中。 在Spring做这件事最好的方法是什么?使用Bean,配置注释..? 例如,我找到了https://stackoverflow.com/a/44923402/494659
我试图运行简单的Spring Data Rest Boot应用程序(v1.2.3. RELEASE),只有一个小的修改从工作Spring参考示例应用程序(http://spring.io/guides/gs/accessing-mongodb-data-rest/),它无法启动。 更具体地说,当我使用: 下面是简单的代码配置: 在没有其他任何问题的情况下,我在启动时遇到以下错误: 2015-04-
我正在使用Play框架1.2.5和Hibernate3.25来开发我的Web应用程序。我遇到应用程序启动问题,速度很慢:( 对于任何JavaEE servlet驱动的应用程序,我们使用来初始化会话工厂(这确实是一项耗时的工作),一旦部署了应用程序,会话工厂就会被初始化,并且所有这一切都必须在应用程序准备好为最终用户使用之前完成。这样,当用户触发第一个请求时,第一个请求的响应时间更快。 但是,对于P