Factored out abstract message consumer