···
appbsky "github.com/bluesky-social/indigo/api/bsky"
jetstream "github.com/bluesky-social/jetstream/pkg/models"
···
"github.com/redis/go-redis/v9"
+
events []jetstream.Event
+
func NewQueue(capacity int) *Queue {
+
events: make([]jetstream.Event, 0, capacity),
+
func (q *Queue) Enqueue(event jetstream.Event) {
+
q.events = append(q.events, event)
+
func (q *Queue) Dequeue() (jetstream.Event, bool) {
+
var event jetstream.Event
+
if len(q.events) == 0 {
+
q.events = q.events[1:]
+
func (q *Queue) Size() int {
const JetstreamUrl = `wss://jetstream1.us-west.bsky.network/subscribe`
var AppBskyAllowlist = map[string]bool{
···
+
func handler(ctx context.Context, queue *Queue) {
rdb := redis.NewClient(&redis.Options{
···
+
event, ok := queue.Dequeue()
+
time.Sleep(100 * time.Millisecond)
if event.Kind != jetstream.EventKindCommit {
···
if _, err := pipe.Exec(ctx); err != nil {
log.Printf("failed to exec pipe\n")
+
log.Printf("queue size: %d\n", queue.Size())
···
log.Printf("websocket closed\n")
+
queue := NewQueue(100_000)
log.Printf("starting up\n")
+
var event jetstream.Event
err := conn.ReadJSON(&event)
log.Printf("ReadJSON error: %v\n", err)