【问题标题】:Tickets booking (stateful) web service on Spring bootSpring boot 上的门票预订(有状态)Web 服务
【发布时间】:2019-07-13 19:32:20
【问题描述】:

我需要一些有状态的 Web 服务(假设门票预订分 5 个步骤 1)选择 ...5)支付)并希望使用 Spring(引导)框架来实现它

谷歌搜索

春季网络服务

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

REST 客户端是用来调用 REST API 的,而 REST API 应该是无状态的

有状态会损害可扩展性

由于具有出色的嵌入式和自动配置库,在 Spring Boot 中创建 RESTful Web 服务非常容易,我不想拒绝它。

所以我看到了一些克服这个问题的方法:

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

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

  1. 在客户端而不是在服务器上维护的状态。所以我建议的一种方法是您可以使用 cookie 来存储您的状态和临时数据
  2. 使用一些富客户端框架,如 angular 或 react(我在这方面做得不好,但相信有可能在这些框架中保持状态呈现)虽然我认为无论如何 cookie 用于这些目的,所以它几乎与 3 相同)
  3. 使用 Spring + SOAP。 Soap 可以维护状态,但我认为这种方式已经过时,从头开始创建的现代应用程序不应该使用 SOAP
  4. 此项目不要使用 spring 框架,而是使用前端框架(在 4 中提到)+ Node.js(无论如何它将是有状态的)

那么选择哪种方法更好?

【问题讨论】:

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


    【解决方案1】:

    因为你的 REST 服务

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

    您应该将状态保存在数据库或 Redis 等分布式缓存中。

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

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 2018-10-25
      • 2015-03-10
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多