English 中文(简体)
如何优化业余API反应, 将外部API多次调用并回应结果清单?
原标题:How to optimize a rest API response that call external APIs multiple time and responds list of results?

我已写下休息的API, 接受一份清单的请求(此清单的大小是动态的) 。

现在,我的API是做什么的, 对于列表中的每个项目, 都叫外部API, 并回应所有回复的收集 。

请参见以下流程图:

现在,这个过程耗费时间,反应时间太长。

<强 > 注:

  1. 这必须是一个同步的过程 。

  2. 我们在这里不能执行页数。

  3. 我们也不想多读,因为如果项目数量太少,如果项目数量太高,它可能会消耗大量资源,那么,它可能就太过分了。

那么,我们能做些什么来减少这种反应时间吗?

问题回答

为了解决你的问题,我建议 被动的微服务, 即如何开发无阻 同步的REST API 和无同步事件驱动的服务。

Traditionally, as Java developers, we are used to implementing synchronous communication using blocking I/O, for example, a RESTful JSON API over HTTP. Using a blocking I/O means that a thread is allocated from the operating system for the length of the request. If the number of concurrent requests goes up, a server might run out of available threads in the operating system, causing problems ranging from longer response times to crashing servers. Using a microservice architecture typically makes this problem even worse, where typically a chain of cooperating microservices is used to serve a request. The more microservices involved in serving a request, the faster the available threads will be drained.

If a synchronous programming model is preferred, use reactive frameworks that can execute synchronous requests using non-blocking I/O, without allocating a thread while waiting for a response. This will make the microservices easier to scale in order to handle an increased workload.

使用可完成的未来在爪哇同时调用多个REST API, 可以通过不阻拦、不同步的调用来显著改善业绩。

我们假设有4个休息室, 并且那些执行时同步, 每人需要100毫秒才能得到数据, 所以总共4毫秒需要400毫秒才能执行, 所以如果你使用可完成的未来, 那么所有4个API 执行的都是无序的, 而不是400毫秒, 你可以在100毫秒内得到响应。

使用可满足的未来, 我们可以利用可满足的未来, 将未来融合在一起。 等待所有未来完成, 然后处理结果 。

    CompletableFuture<Void> allFutures = CompletableFuture.allOf(api1, api2, api3);




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签