2026-04-07 11:48:19 +08:00

41 lines
595 B
Go

package queue
import (
"context"
)
type MemoryQueue struct {
ch chan Job
}
func NewMemoryQueue(size int) *MemoryQueue {
return &MemoryQueue{ch: make(chan Job, size)}
}
func (q *MemoryQueue) Publish(_ context.Context, job Job) error {
q.ch <- job
return nil
}
func (q *MemoryQueue) StartConsumer(ctx context.Context, handler Handler) error {
go func() {
for {
select {
case <-ctx.Done():
return
case job, ok := <-q.ch:
if !ok {
return
}
_ = handler(ctx, job)
}
}
}()
return nil
}
func (q *MemoryQueue) Close() error {
close(q.ch)
return nil
}