Start here. This is the direct spoken answer to practice first.
Why this question matters
Duplicate delivery is normal in an at-least-once system because work and acknowledgement cross separate failure boundaries. Handlers must make repeated delivery safe for every durable and external side effect.
Most practical queues give at-least-once delivery, which means a message can be delivered more than once. That can happen after worker crashes, lock expiration, network failure, or uncertain acknowledgement. I would design the handler so processing the same message twice does not create duplicate business effects. That usually means a stable message id, business idempotency key, or unique database constraint.