关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
上个月关门了。
改进这个问题
我想为我的项目征求一些意见。我正在调用spring boot项目中的一个web服务。
这是一个web服务项目。因此,我的项目将从客户那里获取一个标准查询列表,并根据这些标准,我将调用另一个外部服务。这是一个门户项目。
通常,我想查询这个外部服务,将一些数据作为列表提供给我。但是,这个外部服务不提供数据列表。取而代之的是,这项服务只为每个呼叫提供一条记录。这就是为什么我必须为每个记录调用这个外部服务,这些记录可能超过1000条。因此,在循环内调用此服务将是一个性能问题。
我在看SpringBoot多线程操作。通过threadpooltaskexecutor,我们可以使用许多线程来调用web服务。然而,我甚至不知道这是不是一个好主意,我应该执行多少线程?使用这些线程作为异步线程好吗?
举个例子,我的项目将从外部获得一个用户id列表。我需要从另一个外部服务获取每个用户的详细信息。但是,这个外部服务没有给我一个用户列表,相反,这个外部服务只是根据用户id返回一个用户,所以我需要用每个用户id调用多次相同的服务,并对这些数据进行一些更改。在这个响应之后,详细信息列表将被发送给谁调用我的网关项目。
我没有足够的多线程经验,这就是为什么我要征求你的意见来解决这个问题。
1条答案
按热度按时间igetnqfo1#
多线程将是一个问题,因为
您将如何确保所有线程都已响应,如果其中一个线程抛出异常怎么办。
你将如何综合所有的回答
当您计划异步时,我假设您的需求不涉及任何依赖操作,我的意思是,一旦您收到来自一个服务的响应,您就不打算将数据用于另一个调用。我还假设,api只执行读取操作,没有插入/更新。
记住这一点,我更喜欢db的工作。我更喜欢
为每个批创建一个临时表(模式应该包括userid和api返回的所有其他字段)。表中的记录数应与请求中的用户ID数相同。可以使用时间戳作为表名。这是为了确保,您不会混合两个单独的请求。
插入该表中的所有用户标识
运行一个读取所有记录的作业
作业调用api,并用必要的详细信息更新行
在填充表中的每一行之后,应该使用日期
这样,就可以使用线程,如果一个线程失败,则不会填充相应的行。