А , если последний не отосланный message за пределами while не нужен, то можно написать функцию с параметрами: откуда однократно прочитать, логить?, куда передать. А возвращать флаг "эндец" (нет собщения или некому отправлять)   и заwhileить её