41 lines
595 B
Go
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
|
|
}
|