Получатель получает не все сообщение. Отправлять и получать выходы работают на буферах передачи, отправляемых/принимаемых по каналам. Они будут содержать различные потоки протокола, которые не документируются, потому что протокол не является общедоступным, и часть этих потоков протокола будет фрагментами сообщений, разбитых на разделы в 32 Кб.
Вы не даете достаточно информации в своем вопросе, чтобы узнать, какой тип канала вы используете, но я предполагаю, что это на стороне клиента, так как вы пишете его на Java, и это единственная среда, это применимо.
Дать выход на стороне клиента, вам нужно быть осторожным, вы имеете дело со случаями, когда сообщение успешно не ставится на целевой очереди, и вы должны будете управлять syncpoints и т.д.
Если вы использовали каналы QMgr-QMgr, вы должны использовать выход сообщения, чтобы захватить вызовы MQXR_MSG, где вам предоставляется все сообщение. Если вы отправляете какие-либо дополнительные сообщения в выход из канала, отправляемые вами сообщения включаются в Syncpoint канала и поэтому совершаются, если исходные сообщения были совершены.
Поскольку вы используете каналы client-QMgr, вы можете посмотреть выход API на конец QMgr (в настоящее время API-интерфейсы клиентской стороны поддерживаются только для клиентов C) и улавливают все вызовы MQPUT. Этот выход также даст вам коды возврата MQPUT, чтобы вы могли закодировать свой выход, чтобы посмотреть, и справиться с неудачными статами.
Конечно, запись выхода является сложной задачей, поэтому может быть полезно выяснить, есть ли какие-либо заранее написанные инструменты, которые могли бы сделать это для вас, а не начинать с нуля.