Configuration
Configure the PubSub module inconfig.yaml:
config.yaml
Available Adapters
- LocalAdapter (Default)
- RedisAdapter (Production)
In-memory pub/sub for development and single-instance deployments:
LocalAdapter stores subscriptions in memory. Events are only delivered to subscribers in the same process instance.
Publishing Events
Use thepubsub.publish function to publish events to a topic:
string
required
The topic name to publish the event to. Cannot be empty.
any
required
The event data payload. Can be any JSON-serializable value.
Subscribing to Topics
Define subscribe triggers to listen for events on specific topics:index.ts
Trigger Configuration
string
required
Must be
subscribe to register a PubSub subscriptionstring
required
The topic name to subscribe to
Use Cases
Real-time Notifications
Event Broadcasting
Cross-Service Communication
LocalAdapter vs RedisAdapter
LocalAdapter
- Use for: Development, single-instance deployments
- Storage: In-memory HashMap
- Scope: Single process instance only
- Performance: Extremely fast (no network overhead)
- Persistence: None (events lost on restart)
RedisAdapter
- Use for: Production, multi-instance deployments
- Storage: Redis pub/sub channels
- Scope: All connected instances
- Performance: Fast with minimal network latency
- Persistence: None (Redis pub/sub is ephemeral)
Error Handling
The publish function returns errors for invalid input:Best Practices
- Use descriptive topic names - Use namespaced topics like
user.created,order.shipped - Keep payloads small - PubSub is optimized for real-time events, not large data transfers
- Handle failures gracefully - Subscribers should not throw errors that affect other subscribers
- Use Redis in production - RedisAdapter enables horizontal scaling across multiple instances
- Don’t rely on delivery guarantees - Use the Queue module if you need guaranteed delivery
Comparison with Queue Module
API Reference
pubsub.publish
PubSubInput
required
null on success, ErrorBody on failure
Errors:
topic_not_set- Topic is empty or not provided