r<-chan

Remote Go channels, backed by Redis Streams

go get github.com/ndyakov/rchan

// process A (producer)
ch, _ := rchan.New[Job](ctx, rdb, "jobs", rchan.WithCapacity(16))
sc := ch.SendC()
sc <- Job{ID: 1}   // blocks when 16 are in flight
close(sc)          // propagates like close(ch)

// process B (consumer) — competing consumers, exactly-one delivery
ch, _ := rchan.New[Job](ctx, rdb, "jobs", rchan.WithCapacity(16))
for job := range ch.C() {
    process(job)
}