for {
// 每兩秒執行一次
<-time.After(time.Second * 2)
// 檢查事件中心是否在線上
if !es.isConnected {
if err := pingStore(esURL); err == nil {
es.isConnected = true
panic("你已經死了。")
}
continue
}
// 如果佇列內沒有資料則略過。
if len(es.queue) == 0 {
continue
}
// 如果佇列內有資料則處理。
for i := len(es.queue) - 1; i >= 0; i-- {
e := es.queue[i]
// 建立串流撰寫者。
writer := es.NewStreamWriter(e.stream)
// 將事件推播到該串流中。
err := writer.Append(nil, goes.NewEvent("", "", e.data, e.meta))
if err != nil {
continue
}
// 將該傳送的事件從佇列中移除。
es.queue = append(es.queue[:i], es.queue[i+1:]...)
}
}