Что вы подразумеваете под неблокирующим ожиданием? Если подключились - проверили сообщения - отключились - то это предполагает, что такую операцию нужно производить с определенной периодичностью, тогда смысл RabbitMQ в данном сценарии теряется, т.к. можно через определенный интервал времени проверять новые сообщения сразу в СУБД например.
Что касается сообщений и RabbitMQ, то можно создавать 2 очереди, (одну для передачи сообщений, другую для получения). Соответственно для получения сообщений подключаемся к очереди, слушаем из нее сообщения и при получении выдаем пользователю. Для отправки сообщений шлем отдельный запрос во вторую очередь, тут блокировки не будет.