Обрабатываются события только один раз (pub/sub) с использованием Nitric в GO
Шаблон Idempotent Consumer необходим для обработки повторяющихся сообщений в микросервисах, гарантируя, что повторная обработка одного и того же сообщения приводит к тому же результату, что и однократная обработка.
Этого можно достичь путем отслеживания ID сообщений либо в отдельной таблице PROCESSED_MESSAGE
, либо внутри бизнес-объектов, на которые влияют сообщения. Записывая ID обработанных сообщений, обработчик сообщений может идентифицировать и удалять дубликаты, обеспечивая идемпотентную обработку и согласованность данных во всех микросервисах.
В этом коротком руководстве мы приведем пример простого фрагмента, который использует метод Subscribe
для обработки сообщений из темы с именем "updates".
Наша цель - гарантировать, что событие обрабатывается только один раз, используя встроенную функцию, предоставляемую Nitric SDK для проверки на наличие дубликатов.
Предварительные условия:
Перейдите к установке на вашем компьютере Nitric SDK для Go.
import (
"fmt"
"github.com/nitrictech/go-sdk/nitric"
"github.com/nitrictech/go-sdk/nitric/faas"
)
func main() {
updates := nitric.NewTopic("updates")
updates.Subscribe(func(ctx *faas.EventContext, next faas.EventHandler) (*faas.EventContext, error) {
if isDuplicate(ctx.Request) {
return ctx, nil
}
// TODO: Not a duplicate, process the event
})
if err := nitric.Run(); err != nil {
fmt.Println(err)
}
}
Вызывая isDuulate
вместе с входящим запросом, он проверяет наличие дубликатов сообщений, отбрасывая их для поддержания идемпотентности и соответствующим образом обрабатывая новые или уникальные сообщения.