【发布时间】:2019-04-30 16:52:07
【问题描述】:
我创建了一个 REST API - 简而言之,我的客户点击了一个特定的 URL,她得到了一个 JSON 响应。
在内部,当 URL 被点击时,一个相当复杂的过程开始了,并且在使用微服务架构时涉及到各种服务。
我观察到一些性能瓶颈并决定切换到消息队列系统。这个想法是,现在,一旦用户点击 URL,就会在内部消息队列上发布一个请求,等待它被使用。该消费者将处理并发布回队列,这将发生很多次,直到最后,为用户提供服务的同一节点将收到处理后的响应以传递给用户。
现在正在使用异步“即发即弃”模式。但我的问题是,一旦处理的结果返回并且没有阻塞(即它可以处理多个请求直到收到响应),为特定人提供服务的节点如何记住它正在为谁服务?如果有什么不同的话,我的堆栈看起来有点像这样:TomCat、Spring、Kubernetes 和 RabbitMQ。
总而言之,请求节点(其工作是向队列中推送项目)如何与请求 JSON 响应(即客户端正在等待 JSON 响应)的客户端保持开放连接并接收返回的数据正确的客户?
【问题讨论】:
-
您是否可以选择 a) 使用非阻塞调用,以便您可以照常处理另一个请求,而当前请求正在等待来自后端微服务的响应,b) 返回客户端任务 ID 令牌以便她稍后可以在任务准备就绪后查询任务结果(从而维护任务 ID 到 response-json 映射?
-
是的,两者都是我的选择
标签: spring rest tomcat kubernetes rabbitmq