我有一个使用springboot构建的微服务。负载平衡器有一个固定的超时时间,这个服务执行一些大型计算,因此当我从ui调用它时,响应就会超时。
我认为SpringKafka非常适合这个场景,它可以帮助我将我的响应排队到kafka生产者中,然后从消费者服务中读取它们。但是我们为整个服务创建的kafka主题是不变的,那么我如何从这个队列中检索与从ui发出的特定请求相对应的结果(因为同一个服务将有多个请求)。另外,如果有一些很好的例子,这种实现将非常有帮助
我有一个使用springboot构建的微服务。负载平衡器有一个固定的超时时间,这个服务执行一些大型计算,因此当我从ui调用它时,响应就会超时。
我认为SpringKafka非常适合这个场景,它可以帮助我将我的响应排队到kafka生产者中,然后从消费者服务中读取它们。但是我们为整个服务创建的kafka主题是不变的,那么我如何从这个队列中检索与从ui发出的特定请求相对应的结果(因为同一个服务将有多个请求)。另外,如果有一些很好的例子,这种实现将非常有帮助
2条答案
按热度按时间9udxz4iz1#
对于apachekafka,有一个openpull请求向spring添加请求/应答语义。
这个
sendAndReceive
方法返回ListenableFuture
在收到回复时完成。7jmck4yq2#
你要找的基本上是两件事
创建一个管道来处理所有异步请求。
跟踪系统来跟踪你的工作状态。
因此,您应该为您在kafka队列中推送的每个请求分配一个trackingid,并且随着通过管道的消息流更新与该trackingid对应的状态。为了知道确切的状态,你应该公开一个api(你可以链接到你的ui),它将给出你的作业的确切状态。