Overview - PeteGoo/Pushqa GitHub Wiki
Often when defining a pub/sub messaging event source, it is not known what messages a particular client will be interested in. Often the solution to this is to divide the messages into categories or tag them so that interested consumers can listen to a simple set of pre-defined message types.
However in the pull based model of REST data access we have OData. OData allows the consumer to specify a query to be performed server-side resulting in the filtering of the relevant data before the results are returned to the requestor. It uses a predefined URI syntax for capturing the query information which can be constructed directly or via client APIs, most notably Linq.
What if we could allow subscribers to a messaging source to define what messages they are interested in and filter the publishing of messages to only those that are relevant for the subscriber. This is the goal of Pushqa.
Pushqa uses Reactive Extensions from Microsoft (Rx) heavily in order to meet this goal. Reactive Extensions is a set of classes that make it easier to deal with event streams and asynchronous behaviour. One of the advantages of Rx is that it allows for Linq queries to be used to filter events streams. Other useful functions of Rx are also implemented like Take and Skip.