I've done similar things with PostgreSQL and MS-SQL, and it's worked fine for relatively active queues/events/streams, etc. In particular email queues, where the rendered body is captured in the DB, so it can be displayed as-is in an email link itself, or for an sms message link.
It will really depend on your needs... do you have tens, hundreds... or millions of messages a second you need to process? Is this bursty or constant?
Sequin is a message stream built on Postgres. Unlike a queue, Sequin persists messages so that you can spin up consumers to ingest data at any time. It's comparable to Kafka, but easier to run and use.
I can understand the desire to never, ever have to deal with Zookeeper again, but does the ergonomics promise of sequin hold up?