【问题标题】:Restful services reliabilty宁静的服务可靠性
【发布时间】:2015-10-16 22:38:04
【问题描述】:

我正在开发 Restful 服务,我们将在其中将新记录插入/更新到数据库中。

由于 REST 使用 HTTP 进行通信,并且 HTTP 不可靠,我担心如果连接失败,请求可能无法发送到服务器。

我在link 中找到的建议之一是“如果连接失败,请从客户端重试。”但我们无法控制客户端应用程序。

其他解决方案是实施 RabbitMQ/JMS 等消息系统以确保可靠性。

我还在以下link 中发现添加会话状态可以提高可靠性。我无法理解这是怎么发生的,更重要的是,一个好的宁静服务不是总是无状态的吗?

所以总结一下我的问题:

  1. 要实现可靠性,消息传递系统是最好的方法吗?
  2. 会话管理如何帮助我实现可靠性?

【问题讨论】:

  • 如果您对客户端没有任何控制权,那么您无能为力。在服务器端,您应该尝试使用正确的状态码 (see this link),以便客户端可以检测请求是否给出了预期的结果,但即使这样也需要客户端记下返回的状态码并在正确的方式。
  • @Jasper 感谢您的回复。现在需要提出新的设计并让客户端应用程序来处理请求。 :)

标签: java rest session-state


【解决方案1】:

消息可以提供帮助,只要您在收到插入或更新信息的命令时不进行任何处理,因为您需要立即将命令放入队列中。此解决方案通常会增加相当多的复杂性,因为您需要在完成命令处理后异步通知您的客户端(是成功还是失败?...还是我未能发送结果?)。

会话管理?为了可靠性?从来没有听说过 :)。 Restful 服务通常是无状态的......所以这里没有会话!

另一个选项(但取决于您的客户如何与您集成)是允许您的客户生成您将要存储/更新的项目的 ID,在这种情况下,如果他们收到错误返回,但您有成功处理命令,客户端可以重试,同样的更新也会发生。您可以将此与版本控制配对,以防止过时的更新迟到。

【讨论】:

  • 感谢您的回复。客户端 ID 方法似乎是我目前最好的选择,但必须看看如何与客户端应用程序集成。
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
相关资源
最近更新 更多