I've lately been very interested in reactive microservice design with streaming and event-driven architectures.
When one writes (i.e., manages) services, this paradigm works extremely well by simply responding to published events on topics.
However, we don't always control the implementation of all the services with which we interact. For example, consider a commercial service which exposes a black-box endpoint which does some asynchronous work and returns an ID for that job. It also exposes an endpoint for retrieving the status of that job by ID. For sake of simplicity, we'll assume these two endpoints and a "get results" endpoint are the only exposed endpoints.
In this case, we are left in a situation where we must necessarily poll the service to check the status of the work. Are there established patterns for doing this? I'd guess a supervisor which polls on a timer and publishes the job status might be a "fine" approach, but I'm wondering if there are other battle-tested approaches.