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