Java REST服务前面的请求队列
在REST服务前面有一个请求队列的最佳技术解决方案(框架/方法)是什么。 因此,我可以增加REST服务实例的数量以获得更高的可用性,并将请求队列放在前面,以形成服务客户端的服务/事务边界Java REST服务前面的请求队列,java,rest,soa,Java,Rest,Soa,在REST服务前面有一个请求队列的最佳技术解决方案(框架/方法)是什么。 因此,我可以增加REST服务实例的数量以获得更高的可用性,并将请求队列放在前面,以形成服务客户端的服务/事务边界 我需要为请求队列(java)选择好的轻量级技术/框架 实现与it竞争的消费者的方法 这里有几个问题,取决于你的目标 首先,它只促进后端资源的可用性。考虑是否有5个服务器在后端处理队列请求。如果其中一台服务器宕机,则排队的请求应返回到队列中,并重新传递到其余4台服务器中的一台 但是,当这些后端服务器正在处理时,前
这里有几个问题,取决于你的目标 首先,它只促进后端资源的可用性。考虑是否有5个服务器在后端处理队列请求。如果其中一台服务器宕机,则排队的请求应返回到队列中,并重新传递到其余4台服务器中的一台 但是,当这些后端服务器正在处理时,前端服务器将保留实际的、启动的请求。如果其中一个前端服务器出现故障,那么这些连接将完全丢失,由原始客户端重新提交请求 前提可能是,较简单的前端系统的故障风险较低,对于软件相关的故障,这一点肯定是正确的。但网卡、电源、硬盘等对人类的这种虚假希望是相当不可知的,它们将平等地惩罚所有人。因此,在讨论总体可用性时考虑这个问题。 至于设计,后端是一个简单的过程,等待JMS消息队列,并在消息到达时处理它们。这方面的例子有很多,任何JMS服务器都可以在较高的级别上使用。您所需要的只是确保消息处理是事务性的,这样,如果消息处理失败,消息将保留在队列中,并可以重新传递给另一个消息处理程序 JMS队列的主要需求是集群化。JMS服务器本身是系统中的单点故障。失去了JMS服务器,您的系统几乎陷入了困境,因此您需要能够对服务器进行集群,并让使用者和生产者适当地处理故障转移。同样,这是特定于JMS服务器的,大多数人都这样做,但在JMS世界中,这是非常常规的 前端是事情变得有点棘手的地方,因为前端服务器是从REST请求的同步世界到后端处理器的异步世界的桥梁。REST请求遵循一种典型的RPC模式,即使用来自套接字的请求负载,保持连接打开,处理结果,并将结果返回到原始套接字 为了实现这种移交,您应该看看异步Servlet,它处理引入的Servlet3.0,并且在Tomcat7、最新的Jetty(不确定是什么版本)、Glassfish 3.x和其他版本中都有 在本例中,您将在请求到达时使用
HttpServletRequest.startAsync(HttpServletRequest-request,HttpServletResponse-response)
将名义上的同步Servlet调用转换为异步调用
这将返回AsynchronousContext,一旦启动,允许服务器释放处理线程。然后你会做几件事