PubSub

This package provides a simple pub/sub implementation using the NATS messaging system. It allows users to subscribe and publish events and messages easily.

Installation

To use this package in your project, add the following import statement:

import "github.com/pingponglabs/mediamagic-platform/libs/pubsub"

Usage

Creating a new PubSub client

import (
	"github.com/nats-io/nats.go"
	"go.uber.org/zap"
)

// ...

conn, _ := nats.Connect(nats.DefaultURL)
logger, _ := zap.NewProduction()
pubsubClient := pubsub.New(conn, logger)

Subscribing to a generic event

callback := func(value []byte) {
	// Process the message here
}

key := "message-key"
err := pubsubClient.Subscribe(key, callback)

if err != nil {
	// Handle error here
}

Subscribing to a typed event

callback := func(value *pubsub.Event) {
	// Process the message here
}

key := "message-key"
err := pubsubClient.SubscribeEvent(key, callback)

if err != nil {
	// Handle error here
}

Publishing a generic event

key := "message-key"
value := []byte("Hello, World!")
err := pubsubClient.Publish(key, value)

if err != nil {
	// Handle error here
}

Publishing a typed event

key := "event-key"
event := pubsub.Event{
	ResourcedID: id, // for example, deployment ID
	ResourceType: "deployment",
    Value: 1, // As in, 1 created
	OwnerID: ownerID, // The user who created the deployment
	Role: "user",
	EventType: "created",
	Metadata: map[string]string{
        "model": "image-classification",
    }, // Any additional metadata
}

err := pubsubClient.PublishEvent(key, event)
if err != nil {
	// Handle error here
}

Last updated