gpt4 book ai didi

java - 在 clojure REST+disk-I/O 应用程序中要处理哪些错误?

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:05 25 4
gpt4 key购买 nike

我有一个服务器应用程序,它稍微简化了,通过 rest-api 从一个不够强大的服务器定期进行测量。这些值应该在本地缓存(并且带有时间戳/不可变),可能存储为 FloatBuffer其中每个位置对应一个测量样本。有一个 web 浏览器应用程序定期发出 ajax 请求以更新网页上的一些简洁统计信息,如下图所示:

Picture describing system architechture for REST measurement service and presentation

假设服务器已经启动并运行,还有很多地方可能会出错

  • REST 测量服务器可能无法访问(服务器只是在本地存储测量值)
  • 与测量服务器的网络连接可能已断开
  • 存储空间可能已满或损坏
  • 浏览器可能会失去与服务器的联系并尝试重新连接

我的策略通常应该是处理错误的:

如果通过 REST 从测量服务获取值时出现问题,则应该每分钟重试一次。如果错误持续超过 30 分钟,则应通知管理员。如果出现磁盘问题,应立即通知管理员,或者最好在磁盘变满之前通知管理员。

最终用户体验应该对错误尽可能透明,但应用程序仍应尽可能正常运行,通知用户发生了错误,同时显示最新的可用数据.

关于网络问题(使用 clj-http 通过由 ScheduledThreadPoolExecutor 作业触发的代理发出 REST 请求)以及尝试刷新磁盘时的磁盘问题,我如何找到要处理的错误FloatBuffer?

什么是实现上面提到的相当有状态但算法策略的明智方法?当 agent 报告错误并切换到某种恢复模式作业时,我是否应该简单地处理错误?

最佳答案

在这种涉及不同系统上的多个组件的交互中,应避免最终用户执行许多同步操作。只有同步操作是有时间限制的并且需要立即报告错误。

一旦最终用户的交互将使系统异步,您在错误处理机制上也有很多选择......在最终用户与系统交互的地方,您可以有一个错误映射器来翻译来自各种组件的所有错误都会向用户传达可理解的消息。

应该给用户一个 API 来查询他提交的请求的状态。那应该能够判断请求是否完成或是否有错误。如果网络连接需要更多时间,状态消息可以通知用户。

在任何分布式系统中,每个组件都会在某个时刻报告错误。一些API为此提供了错误监听器接口(interface)。这将向用户异步报告错误。查看 JMS ( http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html ) 等 API。它们被证明可用于复杂系统并具有良好的错误处理机制。

关于java - 在 clojure REST+disk-I/O 应用程序中要处理哪些错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14070255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com