feat: add dead letter queue
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-01-19 11:33:38 +01:00
parent 1cf9d23491
commit 0b042780c3
13 changed files with 234 additions and 2 deletions

View File

@@ -4,8 +4,10 @@ import (
"context"
"fmt"
"log/slog"
"math/rand/v2"
"time"
"git.front.kjuulh.io/kjuulh/orbis/internal/deadletter"
"git.front.kjuulh.io/kjuulh/orbis/internal/workscheduler"
"github.com/google/uuid"
)
@@ -13,12 +15,18 @@ import (
type WorkProcessor struct {
workscheduler *workscheduler.WorkScheduler
logger *slog.Logger
deadletter *deadletter.DeadLetter
}
func NewWorkProcessor(workscheduler *workscheduler.WorkScheduler, logger *slog.Logger) *WorkProcessor {
func NewWorkProcessor(
workscheduler *workscheduler.WorkScheduler,
logger *slog.Logger,
deadletter *deadletter.DeadLetter,
) *WorkProcessor {
return &WorkProcessor{
workscheduler: workscheduler,
logger: logger,
deadletter: deadletter,
}
}
@@ -41,10 +49,17 @@ func (w *WorkProcessor) ProcessNext(ctx context.Context, workerID uuid.UUID) err
}
time.Sleep(time.Millisecond * 10)
// Process or achive
if err := w.workscheduler.Archive(ctx, *schedule); err != nil {
return fmt.Errorf("failed to archive item: %w", err)
}
if rand.Float64() > 0.9 {
if err := w.deadletter.InsertDeadLetter(ctx, *schedule); err != nil {
return fmt.Errorf("failed to deadletter message: %w", err)
}
}
return nil
}