extract message bus interaction into its own gem