encore-go-pubsub — скилл для Claude Code: события и установка
Помогает писать асинхронный обмен сообщениями в Encore Go через topics и subscriptions. Нужен для фоновых обработчиков и публикации событий.
npx skills add encoredev/skills --skill encore-go-pubsub -a claude-code
npx skills add encoredev/skills --skill go-pubsub -a claude-codeЧто делает encore-go-pubsub
Скилл объясняет, как объявлять pubsub.NewTopic и pubsub.NewSubscription в Encore Go. Producer публикует событие в topic, а несколько consumers получают его через subscriptions и обрабатывают в фоне. Topics и subscriptions нужно создавать как package-level variables.
Внутри разобраны публикация через Publish, обработчики с context.Context и возвратом error, а также передача прав на публикацию через pubsub.TopicRef. Можно выбрать pubsub.AtLeastOnce или pubsub.ExactlyOnce. При AtLeastOnce события иногда доставляются повторно, поэтому обработчики должны быть идемпотентными. Publish возвращается после постановки сообщения в очередь, так что тяжёлую синхронную работу в его вызывающем коде размещать не следует.
Какие задачи решает
- публиковать события между Go-сервисами
- подключать несколько обработчиков к одному topic
- запускать фоновые реакции на события
- настраивать гарантию доставки сообщений
- передавать публикацию событий библиотечному коду
Примеры запросов агенту
- Создай в Encore Go topic
OrderCreatedс доставкойpubsub.AtLeastOnceи subscription для отправки письма. - Добавь обработчик, который получает
context.Contextи*OrderCreatedEvent, а при ошибке возвращаетerror. - Покажи, как передать право публикации через
pubsub.TopicRefв библиотечную функцию.
Как установить encore-go-pubsub
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill encore-go-pubsub -a claude-codenpx skills add encoredev/skills --skill go-pubsub -a claude-code2Вручную: положить файлы
~/.claude/skills/go-pubsub/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/go-pubsub/
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-pubsub -a codex2Вручную: положить файлы
.agents/skills/go-pubsub/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-pubsub -a cursor2Вручную: положить файлы
.cursor/skills/go-pubsub/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install encoredev/skills go-pubsub2Вручную: положить файлы
.github/skills/go-pubsub/SKILL.md1Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-pubsub -a gemini-cli2Командой платформы
gemini skills install https://github.com/encoredev/skills --path encore/go-pubsubВручную: положить файлы
.devin/skills/go-pubsub/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add encoredev/skills --skill go-pubsub -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о encore-go-pubsub
Как установить encore-go-pubsub в Claude Code?
Выполните npx skills add encoredev/skills --skill encore-go-pubsub -a claude-code, затем используйте файл ~/.claude/skills/go-pubsub/SKILL.md.
Что делает encore-go-pubsub?
Скилл помогает настроить асинхронные события в Encore Go: topics публикуют сообщения, а subscriptions запускают обработчики и позволяют раздавать одно событие нескольким consumers.
Что нужно учесть при доставке pubsub.AtLeastOnce?
Доставка может повторять сообщения, поэтому каждый subscription handler должен быть идемпотентным. Он получает context.Context и событие, а error запускает повторную попытку по retry policy topic.
Исходный текст
SKILL.md · Apache-2.0
---
name: encore-go-pubsub
description: 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.
when_to_use: >-
User wants to publish/broadcast events, fan out a single event to many handlers, fire-and-forget messages between Go services, react to something asynchronously, set up a worker that consumes events, configure delivery guarantees (at-least-once, exactly-once), or use ordering attributes. Trigger phrases: "publish an event", "broadcast", "subscribe to", "topic", "Pub/Sub", "pubsub", "event bus", "OrderCreated event", "send to anyone listening", "background event handler", "queue", "fan out".
---
# Encore Go Pub/Sub
## Instructions
Pub/Sub is for asynchronous messaging between services. Producers publish events to a `Topic`; consumers attach `Subscription`s to react. Resources must be declared as package-level variables — never inside functions.
## Topics
```go
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
```go
msgID, err := events.OrderCreated.Publish(ctx, &events.OrderCreatedEvent{
OrderID: "123",
UserID: "user-456",
Total: 9999,
})
```
### Subscriptions
```go
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:
```go
// 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.Context` and the event pointer; return an `error` to retry per the topic's retry policy.
- Don't do heavy synchronous work in `Publish` callers — `Publish` returns once the message is queued.
© encoredev · Apache-2.0 · encoredev/skills