I need to consume the services of a number of third party systems on my applications homepage. The data pertaining to these downstream systems are updated at different intervals and ideally my system will surface the latest data. It's not a scalable solution for my system to generate requests to each of these downstream systems each time a user hits my homepage. What strategy can i use to ensure the data i surface is current without effecting the reliability of these downstream systems?
Is a consumer/producer strategy most suitable for this requirement?
Like the other answers point out, caching sounds like a good strategy in your case.
An alternative, however, is using a pubsub-based design (not producer-consumer). For example, you can have 3 threads sampling the serivces, each at its own rate, and publishing the new data. Your main system subscribes to those updates (can read them in another thread), and updates its internal state.
Producer-consumer is similar, but not suitable for your case, becuase there's no need for the client (your main system) to consume the data. Imagine you had several systems using the same data from the services -- each would need to subscribe to those updates, but not to consume them, as the update needs to reach all clients. Producer-consumer is appropriate for things like task-pooling, where each worker needs to consume the message, because each task should be run by only one worker.