域事件的可靠异步处理

时间:2019-01-25 19:02:12

标签: go asynchronous event-handling domain-events

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

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

  • 事件处理程序失败时,不应从事件队列中清除该事件,以便以后可以正确处理。
  • 如果整个程序崩溃,则必须对事件进行恢复并进行相应处理。

1 个答案:

答案 0 :(得分:1)

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

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