Returns a ApiFuture that will be completed when there are messages available.
Unfinished existing ApiFuture returned by onData() will be abandoned and superseded by
new onData() call.
CheckedApiException will be set to the Future if there is underlying permanent
error.