订阅 pub/sub 事件时获取以前的事件

Getting previous events when subscribing to pub/sub events

我正在构建一个 Web 应用程序,用户可以在其中排队处理作业。后端日志可能包含:

10:57: Job 101: Part 8 of 10 completed
10:58: Job 101: Part 9 of 10 completed
10:59: Job 100: Part 4 of 7 completed
11:00: New Job Queued.  ID will be 102
11:01: Job 100: Part 5 of 7 completed
11:02: Job 101: All 10 parts completed
11:03: Job 102: started
11:04: Job 100: Part 6 of 7 completed
11:05: Job 102: Part 1 of 12 completed

前端代码如下所示:

axios.post('/job').then((res)=>{
  var job_id = res.body // job_id will be 102
  var source = new EventSource("/status?job_id="+job_id);
  source.onmessage = (event)=>{
    updatePageWith(event.data)
  }
})

因为 EventSource 订阅不是即时的,所以从服务器发回的第一条消息可能是 "Part 2 of 12 completed",缺少第 1 部分的更新。有什么方法可以确保没有事件是错过了,还没有提供一种方法来获取给定作业的所有事件?

我最终解决了以下问题:

var tracking_id = require('uuid/v4')()
var source = new EventSource("/status?tracking_id="+tracking_id)
source.onmessage = (event)=>{
  updatePageWith(event.data)
}
axios.post('/job', { track_with: tracking_id }).then((res)=>{
  var job_id = res.body // job_id will be 102
})

我意识到作业在 EventSource 注册并接收更新之前开始处理的可能性很小,但这种可能性降低了,因为 EventSource 对象不会等到作业在服务器上创建后才进行初始化。