A subscription request specifies a subject for which the data is required. Here's a simple example of how this works:
The diagram shows an FX Trading application subscribing to the major FX currencies (
/FX/MAJOR) by making the appropriate call to StreamLink. StreamLink passes the subscription request to Liberator, which if not already subscribed to this subject, passes the request on to the FX Pricing Adapter (Integration Adapter) that can deal with it. The Adapter obtains the prices for the relevant instruments from a Pricing system.
This style of subscription is called an active subscription.
DataSource applications as data providers and publishers
DataSource applications can also be data providers, so they respond to subscription requests by supplying the relevant data. This is what Integration Adapters typically do.
In the above diagram, the FX Pricing Adapter responds to subscription requests from Liberator by providing the relevant data updates. Similarly, Liberator responds to subscription requests from clients by providing data updates for the requested subjects. Here Liberator is both a subscriber (to updates from the FX Pricing Adapter) and a data provider (of updates to the client), whereas the FX Pricing Adapter is solely a data provider (of updates to Liberator).
If you need to, you can also implement a DataSource application that publishes data by broadcasting it to all its peers rather than by providing the data just to subscribing peers.