RabbitMQ довольно прост в обслуживании. Вы бы использовали две очереди, одну для запросов, а другую для ответов. Используйте заголовок AMQP correlation_id для пометки запросов и ответов, чтобы при получении ответного сообщения его можно было сопоставить с первоначальным запросом.
Однако, если брокер не для вас, используйте ZeroMQ. Это клиентская библиотека, доступная для дюжины или более языков, и она применяет шаблоны обмена сообщениями поверх сокетов. Это означает, что вашему приложению не нужно выполнять все управление сокетами низкого уровня. Вместо этого вы объявляете сокет как REQ / REP, а ZeroMQ обрабатывает все остальное. Вы просто отправляете сообщения в любом формате и получаете сообщения обратно.
Я использовал ZeroMQ для реализации приложения в стиле memcache в Python с использованием REQ / REP.