我遇到了与丢失来自myoku网络服务的回复相关的竞争条件。
heroku路由器将请求传递给Web服务,Web服务处理请求并返回响应,但在此期间,heroku路由器因请求失败,无论是由于客户端(中断)还是后端超时。
问题是Web服务请求处理在后端改变了状态,并且期望将状态更改发送到响应主体中的客户端。响应永远不会到达客户端,因此状态更改将永远丢失。
我的情况中的状态更改恰好是从RabbitMQ消息队列传递和删除消息。 Web服务请求处理程序从RabbitMQ队列中弹出请求,但它无法访问客户端,再也听不到了。
我可以实现自己的基于客户端的消息ACK系统来缓解这个问题。但是,我怀疑你们中的一些人可能有一个更好的解决方案,如何处理确保响应到达客户端。我可以在我的Web服务上使用任何回调来确定响应是否丢失了吗? FWIW我的Web服务是运行嵌入式Jetty的JAX-RS服务。
谢谢!