Решением может быть написание функции, которая имеет в качестве входных данных объект, который вы хотите отправить (например, строку переменного размера), а в качестве выходного - контейнер объектов фиксированного размера.
Что-то вроде:
int Tokenize(std::vector<MessageToken>&, const Message&) const;
int Merge(Message&, const std::vector<MessageToken>&) const;
Затем эти объекты фиксированного размера можно отправлять / извлекать из очереди сообщений.
Преимущество по сравнению с решением Максима заключается в том, чтонеобходимо указать параметр max_msg_size
.