Request a message from the source which must be returned within the given
timeout period. If the timeout expires then null must be returned. Note that
many sources may also potentially throw InterruptedException if a timeout
is interrupted. Many sources are also synchronous and timeouts are not
necessary. In this case the source may simply return null immediately and
this call is equivalent to getMessage() when no messages are available.