DEV Community

Rak
Rak

Posted on • Edited on

5 3 4 4 4

Process events once, (pub/sub) using Nitric in GO

The Idempotent Consumer pattern is essential for handling duplicate messages in microservices, ensuring that processing the same message repeatedly yields the same outcome as processing it once.

This can be achieved by tracking message IDs, either in a separate PROCESSED_MESSAGE table or within the business entities affected by the messages. By recording processed message IDs, a message handler can identify and discard duplicates, ensuring idempotent processing and data consistency across the microservices.

In this short tutorial we will example a simple snippet which uses a Subscribe method to process messages from a topic named "updates".

Our goal is to ensure that the event is processed only once by using an inbuilt function provided by the Nitric SDK to check for duplicates.

If you haven't used the Nitric SDK before, then start with this tutorial.

Pre-Requisites:

  1. Go installed on your machine.
  2. Nitric SDK for 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)
  }
}
Enter fullscreen mode Exit fullscreen mode

By invoking isDuplicate with the incoming request, it checks for duplicate messages, discarding them to maintain idempotency, while processing new or unique messages accordingly.

Learn more about idempotent subscribers and patterns here.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)