In this example - great, you have a “queue” abstraction. When you switch to RabbitMQ or Postgres, how do you move your existing data without a quality of service or data loss? It can be difficult with production datastores even if the abstraction within your service is beautiful.
If you need to keep track of old data, then yes, migration is hard. But queues don't save old data—that's the point of a queue.