http间请求通信

时间:2018-05-21 19:07:09

标签: spring spring-integration spring-rest completable-future

这个想法是对2个不同的端点有2个不同的http请求。第一个是长期昂贵的计算,它返回。第二个请求进行并执行完全相同的昂贵计算但在它返回之前执行一些额外的处理以及更多的数据读取和计算。对于第一次调用将结果写入通道或队列而不是完全相同的计算两次,第二次调用端点可以在返回之前将其与其他数据读取和处理结合起来。

MessageEndpoints和Service激活器可以订阅一个频道,但是它与第二个端点上的第二个http调用在同一个线程中的方式是我无法想象的。对我来说,神秘的是第二个端点上的第二个线程如何阻塞,直到它收到第一个端点创建和发送的消息。

建立一个轮询频道可能是第二个终点上更好的路径,它可以立即开始轮询,同时进行其他读取和计算。

提前致谢。

1 个答案:

答案 0 :(得分:0)

听起来像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