I notice that a move() method was added, but the methods cancel and sendToDLQ seem to be doing the same thing. Shouldn't they call move?
Also
Please avoid
if (blah)
{
...
} else
{
...
}
if (blah)
{
...
}
else
{
...
}
the code formatting has been corrected and the duplicate code is removed: expire(), move() and sendToDLQ() now all calls the private move() method