Earlier quoted context omitted.
The transaction feature seems nice but how often is your application dropping queue messages because something happened between tx.commit() and queue.send(msg)? My experience has been that this is not an issue.
Oh that happens fairly often. In fact, some message will be lost every time your queue server reboots due to a power outage, PSU failure, kernel panic, OOM, etc. (Unless it spends almost all of its time idle in which case I guess no messages will be in flight) You’re guaranteed to break the invariant sooner or later so you end up with all the usual complexity of keeping stuff in sync.
Edit>> I see you edited your post after I responded. None of those scenarios qualify as "fairly often."