春季启动时的票务预订(有状态)Web服务

时间:2019-02-20 07:14:56

标签: java spring web-services spring-boot stateful

我需要一些有状态的Web服务(比方说,在5个步骤中预订机票1)选择... 5)支付),并想使用Spring(启动)框架来实现它

搜索

  

spring Web服务

可以找到

大量RESTful Web服务示例...但是根据REST清单和许多文章/答案(即Sticky Session for Rest API Calls

  

使REST客户端可以调用REST API,并且REST API应该是无状态的

     

状态性会损害可扩展性

由于强大的嵌入式和自动配置的库,在春季启动时创建RESTful Web服务非常容易,我不想拒绝它。

因此,我看到一些克服此问题的方法:

  1. 在Spring Boot中创建RESTful Web服务,并在其中添加会话和存储状态,并添加粘性会话负载平衡器以保持可伸缩性(这比无状态方法更困难,但可行)。是的,它不是 true RESTful服务,但可以正常工作
  2. 创建 true 无状态RESTful服务,将状态保持在
  

临时的“ temp_transaction”数据库表,您的代码可用来查询该表,以确定用户是否正在预订某个特定的座位。

  1. 状态在客户端而非服务器上维护。因此,我建议的一种方式是,您可以使用Cookie来存储状态和临时数据
  2. 使用一些丰富的客户端框架,例如angular或react(即时通讯不是很好,但相信有可能在这些框架中保留状态),尽管我认为反正cookie用于这些目的,所以它几乎与3相同)
  3. 使用Spring + SOAP。 Soap可以保持状态,但是我认为这种方式已经过时,并且从头开始的现代新创建的应用程序不应该使用SOAP
  4. 不要在该项目中使用spring框架,而应使用Front end framework(在第4点提到)+ Node.js(无论如何它都是有状态的)

那么哪种方法更好选择?

1 个答案:

答案 0 :(得分:1)

因为您的REST服务

  1. 可能会崩溃,然后重新启动
  2. 您要扩展并具有多个服务实例

您应将状态保存在数据库或Redis之类的分布式缓存中。

您必须在每个请求中传递会话密钥或预订参考。例如在标题中。