Encore Go Pubsub
Asynchronous messaging in Encore Go via `pubsub.NewTopic` and `pubsub.NewSubscription` from `enco…
by encoredev · Apache-2.0
The skill
Asynchronous messaging in Encore Go via `pubsub.NewTopic` and `pubsub.NewSubscription` from `encore.dev/pubsub` — broadcast events, decouple producers from consumers, and run background handlers.
Encore Go Pub/Sub
Instructions
Pub/Sub is for asynchronous messaging between services. Producers publish events to a Topic; consumers attach Subscriptions to react. Resources must be declared as package-level variables — never inside functions.
Topics
package events
import "encore.dev/pubsub"
type OrderCreatedEvent struct {
OrderID string `json:"order_id"`
UserID string `json:"user_id"`
Total int `json:"total"`
}
// Package level declaration
var OrderCreated = pubsub.NewTopic[*OrderCreatedEvent]("order-created", pubsub.TopicConfig{
DeliveryGuarantee: pubsub.AtLeastOnce,
})
Publishing
msgID, err := events.OrderCreated.Publish(ctx, &events.OrderCreatedEvent{
OrderID: "123",
UserID: "user-456",
Total: 9999,
})
Subscriptions
package notifications
import (
"context"
"myapp/events"
"encore.dev/pubsub"
)
var _ = pubsub.NewSubscription(events.OrderCreated, "send-confirmation-email",
pubsub.SubscriptionConfig[*events.OrderCreatedEvent]{
Handler: sendConfirmationEmail,
},
)
func sendConfirmationEmail(ctx context.Context, event *events.OrderCreatedEvent) error {
// Send email...
return nil
}
Topic References
Pass topic access to library code while maintaining static analysis:
// Create a reference with publish permission
ref := pubsub.TopicRef[pubsub.Publisher[*OrderCreatedEvent]](OrderCreated)
// Use the reference in library code
func publishEvent(ref pubsub.Publisher[*OrderCreatedEvent], event *OrderCreatedEvent) error {
_, err := ref.Publish(ctx, event)
return err
}
Delivery Guarantees
pubsub.AtLeastOnce(default): may deliver duplicates → handlers must be idempotent.pubsub.ExactlyOnce: stricter, capped throughput (AWS 300 msg/s/topic, GCP 3000+ msg/s/region). Does not deduplicate on the publish side.
Guidelines
- Topics and subscriptions must be declared as package-level variables.
- Subscription handlers must be idempotent (at-least-once delivery is the default).
- Subscription handlers receive a
context.Contextand the event pointer; return anerrorto retry per the topic's retry policy. - Don't do heavy synchronous work in
Publishcallers —Publishreturns once the message is queued.
Use this skill
Connect your agent to the Skill Store MCP server and ask for it by ref: encoredev/encore-go-pubsub-2618232611.
Details
- Publisher
- encoredev
- Category
- Software Development › Languages & frameworks
- License
- Apache-2.0
- Updated
- 2026-10-09
References
More from encoredev
- Encore Api Define typed API endpoints in Encore.ts using `api(...)` from `encore.dev/api`.
- Encore Architecture Design or revise the service architecture of an Encore.go or Encore.ts application.
- Encore Auth Protect Encore.ts endpoints with authentication and authorize callers.
- Encore Bucket Store unstructured files in Encore.ts using `Bucket` from `encore.dev/storage/objects` — uploads,…