我正在构建一个Web服务,该服务为来自嵌入式数据库的请求提供服务,该数据库本质上是一个文件。该文件会定期由另一个进程替换。
该服务必须检测此更改并更新文件引用。是否最好使该请求驱动,即每个请求检查是否有更新的版本可用或具有后台线程来执行此操作?
我不会对每个请求做任何与IO相关的操作。事实上,我认为服务本身不应该负责检查数据的新鲜度。它应该关心的只是从源头查找数据(执行一些不占用 CPU 资源的业务逻辑(并将其发出,以便在实时 Web 应用程序的 SLA 安全范围内(我假设?您可以考虑以下可能性:
- 后台线程(如您所提到的(是保留的轮询器检查并更新文件。
- 一种基于事件的设计 (pub-sub(,每当文件更改触发触发器时,都会通知应用进行更新内容。
我认为它应该像后台进程一样 这将通知订阅者注册事件。您可以使用文件侦听器来实现此目的。下面的示例是基于轮询的模型。
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("Path/To/Watched/Directory");
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);