Spring 启动时的票务预订(有状态)Web 服务
Tickets booking (stateful) web service on Spring boot
我需要一些有状态的 web 服务(比如说 5 个步骤中的票务预订 1) select ...5) 支付)并且想使用 Spring(引导)框架
谷歌搜索
spring web service
可以找到大量 RESTful Web 服务示例...但是根据 REST 清单和许多 articles/answers(即 Sticky Session for Rest API Calls)
REST client is made to call REST API and REST APIs should be stateless
Statefulness harms scalability
由于出色的嵌入式和自动配置库,在 spring 启动时创建 RESTful Web 服务非常容易,我不想拒绝它。
所以我看到了一些克服这个问题的方法:
- 在 Spring 中创建 RESTful 网络服务启动并添加到那里的会话并在其上存储状态,并添加粘性会话负载平衡器以保持可伸缩性(它比无状态方法更难但可行) .是的,它不会是 true RESTful 服务,但它会工作
- 创建true无状态RESTful服务,保持状态
temporary 'temp_transaction' database table which your code can consult to determine if a user is in the process of booking, say, a particular seat.
- 状态在客户端维护,而不是在服务器上维护。所以我建议的方法之一是您可以使用 cookie 来存储您的状态和临时数据
- 使用一些富客户端框架,如 angular 或做出反应(我不擅长它,但相信有可能在这些框架中保持状态存在)尽管我认为无论如何 cookie 用于这些目的所以它是几乎与 3)
相同
- 使用Spring + SOAP。 Soap 可以保持状态,但我认为这种方式已经过时,现代新创建的应用程序不应使用 SOAP
- 不要为这个项目使用 spring 框架,而是使用前端框架(在 4 中提到)+ Node.js(无论如何它将是有状态的)
那么选择哪种方法更好?
因为你的 REST 服务
- 可能会崩溃然后重新启动
- 您想扩展并拥有多个服务实例
您应该将状态保存在数据库或分布式缓存中,例如 Redis。
您必须在每个请求中传递 session 密钥或预订编号。例如在 header.
我需要一些有状态的 web 服务(比如说 5 个步骤中的票务预订 1) select ...5) 支付)并且想使用 Spring(引导)框架
谷歌搜索
spring web service
可以找到大量 RESTful Web 服务示例...但是根据 REST 清单和许多 articles/answers(即 Sticky Session for Rest API Calls)
REST client is made to call REST API and REST APIs should be stateless
Statefulness harms scalability
由于出色的嵌入式和自动配置库,在 spring 启动时创建 RESTful Web 服务非常容易,我不想拒绝它。
所以我看到了一些克服这个问题的方法:
- 在 Spring 中创建 RESTful 网络服务启动并添加到那里的会话并在其上存储状态,并添加粘性会话负载平衡器以保持可伸缩性(它比无状态方法更难但可行) .是的,它不会是 true RESTful 服务,但它会工作
- 创建true无状态RESTful服务,保持状态
temporary 'temp_transaction' database table which your code can consult to determine if a user is in the process of booking, say, a particular seat.
- 状态在客户端维护,而不是在服务器上维护。所以我建议的方法之一是您可以使用 cookie 来存储您的状态和临时数据
- 使用一些富客户端框架,如 angular 或做出反应(我不擅长它,但相信有可能在这些框架中保持状态存在)尽管我认为无论如何 cookie 用于这些目的所以它是几乎与 3) 相同
- 使用Spring + SOAP。 Soap 可以保持状态,但我认为这种方式已经过时,现代新创建的应用程序不应使用 SOAP
- 不要为这个项目使用 spring 框架,而是使用前端框架(在 4 中提到)+ Node.js(无论如何它将是有状态的)
那么选择哪种方法更好?
因为你的 REST 服务
- 可能会崩溃然后重新启动
- 您想扩展并拥有多个服务实例
您应该将状态保存在数据库或分布式缓存中,例如 Redis。
您必须在每个请求中传递 session 密钥或预订编号。例如在 header.