subscribe should add the provided listener to the external store and return cleanup logic that removes that listener.