这个想法是有2个不同的http请求到2个不同的端点。第一个是一个长期昂贵的计算,它返回。第二个请求执行完全相同的昂贵计算,但在返回之前,会进行一些额外的处理,并进行更多的数据读取和计算。与其执行两次完全相同的计算,不如第一次调用将其结果写入通道或队列,第二个 http 端点可以在返回之前将该消息与其他数据读取和处理联接。
MessageEndpoint 和服务激活器可以订阅一个通道,但它如何与第二个端点上的第二个 http 调用位于同一线程中,我无法弄清楚。对我来说,谜团是第二个端点上的第二个线程如何阻塞,直到它收到第一个端点创建和发送的消息。
也许设置一个轮询通道将是更好的路线,就像在第二个端点上一样,它可以在进行其他读取和计算时立即开始轮询。
提前谢谢。
听起来像是Aggregator
EI 模式的任务:
http://www.enterpriseintegrationpatterns.com/patterns/messaging/Aggregator.html
https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/messaging-routing-chapter.html#aggregator
这两个请求应与同一组相关。
我不知何故认为,谁先返回对您来说并不重要:唯一关心的是收集所有数据后执行一些后处理。
但是,我什至认为Scatter-Gather对您来说也是一个不错的选择:
https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/messaging-routing-chapter.html#scatter-gather
还有一个线程屏障实现也供您考虑: https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/messaging-routing-chapter.html#barrier