feat: add dead letter queue
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user