[rabbitmq-discuss] pull task queue design

Marek Majkowski majek04 at gmail.com
Wed Jul 25 11:20:55 BST 2012

On Tue, Jul 24, 2012 at 4:31 PM, Mark Ward <ward.mark at gmail.com> wrote:
> Hello,
> I am fairly new to rabbitMQ and AMQP.  I am wondering if it is possible to
> build a pull task queue with task lease capabilities.  Something like the
> Google App Engine pull queue
> https://developers.google.com/appengine/docs/python/taskqueue/overview-pull.

I strongly recommend taking a look at RabbitMQ tutorials:

Second tutorial explains how RabbitMQ deals with "tasks" and "acknowledgments"
(similar to leases):

In rabbitmq you can't do time based 'leases', but 'acknowledgemnts'
are a similar concept, only without an explicit timeout.

> I am exploring the idea to have an http/rest interface between our worker
> and the server.  The server would connect rabbitMQ.  The workers are
> distributed to our client sites.  The reasoning behind this is due to being
> unsure how the persistent connection of AMQP will fair with customer’s
> firewall and proxy server configurations.  I cannot predict the combinations
> or limitations of outbound connections but typically http(s) 80/443 are
> guaranteed outbound connections.
> Possibly a reassurance of how well the AMQP protocol fairs across the
> internet may sway the design back to use the AMQP protocol over using the
> http/proxy idea.  The AMQP setup at the client site will need to function
> right from the start without having to involve network administrators
> altering configurations.  It would be possible for us to host rabbitMQ on
> ports 80/443.

Exposing AMQP protocol to the wide internet is not a recommended setup.
You would be better off by creating a custom application that would pull
messages from rabbitmq and expose them over http or something.

You might want to take a look at SockJS (http://sockjs.org) and
RabbitMQ-Web-Stomp plugin:

> It might be impossible if I am correct that AMQP does not provide message
> timeouts

AMQP does not provide message timeouts. But RabbitMQ has an extension
for that: http://www.rabbitmq.com/extensions.html#lifetimes

> and messages are redelivered if the worker’s connection dies

Correct. Unacknowledged messages will be redelivered when the client
connection dies, or when the client explicitly rejects them.

>  With an http/proxy implementation the connections would have to be stateless.


More information about the rabbitmq-discuss mailing list