-1

在并发系统中,域事件通常是异步处理的。在 Go 中,可以通过channels实现一种简单的异步事件处理方法,但问题是,如果在处理事件时发生了不好的事情,或者最糟糕的是,对于整个程序,事件将会丢失。

在 Go 程序中如何正确处理异步域事件,即:

  • 当事件处理程序失败时,不应从事件队列中清除该事件,以便在以后正确处理。
  • 如果整个程序出现故障,则必须恢复事件并进行相应的处理。
4

1 回答 1

1

第一个相对容易;您可以在工作人员中有一个错误处理程序,在发生错误时重新排队工作。

第二个更难;您的选择是 a) 推出自己的防弹机制,将事件写入磁盘并在以线程安全的方式完成时清除它们,或者 b) 使用已经证明可靠的众多流行系统之一,例如 RabbitMQ 或Kafka,具有适当的复制和冗余,以确保您所需的可靠性水平。我强烈推荐后者。

于 2019-01-25T19:16:18.300 回答