我们有一个项目屏幕,里面有一个组件a,它是处理我们的数据和来自第三方api b的数据的结果。
当项目屏幕打开时,组件a不会立即显示数据,只是在用户输入一些选项之后。因此,用户希望我们首先使用spring的rest模板调用b,并将数据缓存到会话或我们想要的任何地方,只要每个项只有一个对b的请求。
问题是从b调用和预处理数据大约需要1分钟,因此会延迟显示项目屏幕的时间。所以,他们希望我们异步调用。我和他们争辩说,这样做没有意义,因为屏幕需要来自b的数据,即使我们异步地做,我们也需要等待数据准备好,但我怀疑我能改变他们的想法。
需要做的是:
打开item屏幕,在后台调用b并将其保存到会话,以确保调用不会阻止返回item屏幕的jsp页面。
用户在屏幕上选择选项。
如果所有数据都已填充,则使用我们的数据处理来自b的数据(来自会话或等待,如果尚未准备好),并返回结果。
我正在考虑将对b的调用转移到spring taskexecutor,但我不确定如何缓存当前会话的数据(可能我需要将请求传递给任务,以便获得会话?),以及如何以线程安全的方式实现它,在这种情况下,当我们从会话访问数据时,会发生数据争用:
保存到taskexecutor中的会话
从上面步骤3的会话中获取数据
当用户离开项目屏幕时从会话中删除数据。
我甚至不确定会话是否是这个任务的正确选择。
暂无答案!
目前还没有任何答案,快来回答吧!