[rabbitmq-discuss] Streaming stock prices to long-polling clients

Matthias Radestock matthias at lshift.net
Mon Oct 19 12:24:24 BST 2009


Ben,

Ben Browitt wrote:
> In my application I need to stream stock prices to users.
> The 'last price' will be retrieved from a separate service when a
> consumer connects which simplifies things.
> Each user will subscribe to several stocks.
> Users are web browsers connecting using long-polling.
> 
> Do I create one queue per consumer with several bindings, one for each
> stock?
> Prices in this case will be sent with a topic routing key.
> Another option is to create one queue per stock. each consumer will be
> subscribed to several queues.
> Messages will be sent with a direct routing key.

In the latter case, each quote would only go to one consumer, which is
probably not what you want. In an AMQP system, to get the same message
delivered to N consumers you need (at least) N queues. Exchanges *copy*
messages to queues, whereas queues *round-robin* message delivery to
consumers.

Your first setup should work fine, except there is no need to use a
topic exchange. Just use a direct exchange, one queue per user and for
each of the stock symbols a user is interested in create a binding
between the user's queue and the direct exchange.

> Users will connect using a browser with long-polling to the mochiweb plugin.
> Each user will be presented at the server side as an erlang AMQP client.

Have you considered using the rabbitmq-jsonrpc-channel plugin? Even if
you don't want to use it, it's worth taking a look at how it's
implemented since that may well answer some of your questions regarding
long-polling.


Regards,

Matthias.




More information about the rabbitmq-discuss mailing list