sprockets.mixins.amqp

AMQP Publishing Mixin for Tornado RequestHandlers.

Version Downloads Travis CodeCov Docs

Installation

sprockets.mixins.amqp is available on the Python Package Index and can be installed via pip or easy_install:

pip install sprockets.mixins.amqp

Requirements

  • pika>=0.10.0
  • tornado>=4.2.0

Example

You may optionally install sprockets.mixins.correlation into your request handler to take advantage of automatic correlation_id fetching. Otherwise, be sure to set correlation_id as an instance variable on your request handler before sending AMQP messages.

This examples demonstrates the most basic usage of sprockets.mixins.amqp

export AMQP_URL="amqp://user:password@rabbitmq_host:5672/%2f"
python my-example-app.py
import json

from tornado import gen, web
from sprockets.mixins import amqp

def make_app(**settings):
    application = web.Application(
        [
            web.url(r'/', RequestHandler),
        ], **settings)

    amqp_settings = {
        "reconnect_delay": 5,
    }

    amqp.install(application, **amqp_settings)
    return application


class RequestHandler(amqp.PublishingMixin,
                     correlation.HandlerMixin,
                     web.RequestHandler):

    @gen.coroutine
    def get(self, *args, **kwargs):
        body = {'request': self.request.path, 'args': args, 'kwargs': kwargs}
        yield self.amqp_publish(
            'exchange',
            'routing.key',
            json.dumps(body),
            {'content_type': 'application/json'}
        )

AMQP Settings

url:The AMQP URL to connect to.
reconnect_delay:
 The optional time in seconds to wait before reconnecting on connection failure.
timeout:The optional maximum time to wait for a bad state to resolve before treating the failure as persistent.
connection_attempts:
 The optional number of connection attempts to make before giving up.
on_ready_callback:
 The optional callback to call when the connection to the AMQP server has been established and is ready.
on_unavailable_callback:
 The optional callback to call when the connection to the AMQP server becomes unavailable.
on_persistent_failure_callback:
 The optional callback to call when the connection failure does not resolve itself within the timeout.
on_message_returned_callback:
 The optional callback to call when the AMQP server returns a message.
ioloop:An optional IOLoop to override the default with.

Environment Variables

Any environment variables set will override the corresponding AMQP settings passed into install()

  • AMQP_URL
  • AMQP_TIMEOUT
  • AMQP_RECONNECT_DELAY
  • AMQP_CONNECTION_ATTEMPTS

Source

sprockets.mixins.amqp source is available on Github at https://github.com/sprockets/sprockets.mixins.amqp

License

sprockets.mixins.amqp is released under the 3-Clause BSD license.

Issues

Please report any issues to the Github project at https://github.com/sprockets/sprockets.mixins.amqp/issues

API

Version History

`2.1.1`_ May 3, 2017

  • Fix overlogging

`2.1.0`_ May 3, 2017

  • Fix intentional closing of an AMQP connection
  • New behavior for publishing that raises exception
  • Add publisher confirmations
  • Make sprockets.mixins.amqp.install() work with sprockets.http
  • Add support for environment variables prefixed with AMQP_ or RABBITMQ
  • Clean up AMQP message property behavior, make defaults, but don’t change already set values
  • Automatically create the default app_id AMQP message property
  • Split out tests into a mix of unit tests and integration tests
  • Update state behaviors, names, and transitions
  • All publishing is mandatory, returned messages are logged, a callback can be registered

2.0.0 Apr 24, 2017

  • Move Mixin and AMQP client to separate files
  • Replace AMQP connection handling code with latest internal version
  • Provide ability to register callbacks for ready, unavailable, and persistent failure states
  • Remove default AMQP URL from AMQP class, url is now a required parameter for install
  • Rename amqp_publish ‘message’ parameter to ‘body’
  • Add properties for all AMQP states
  • Provide mandatory AMQP properties (app_id, correlation_id, message_id, timestamp) automatically
    • Mandatory properties cannot be overridden
  • Add unit test coverage for new functionality
    • Test execution requires a running AMQP server

1.0.1 Feb 28, 2016

  • Fixed documentation links and generation.

1.0.0 Mar 15, 2016

  • Connect to AMQP in sprockets.mixins.amqp.install and maintain and persist connection
  • Change to use tornado locks.Condition vs locks.Event

0.1.4 Mar 09, 2016

  • Reconnect in connection close callback

0.1.3 Sept 28, 2015

  • Use packages instead of py_modules

0.1.2 Sept 25, 2015

  • Don’t log the message body

0.1.1 Sept 24, 2015

  • Clean up installation and testing environment

0.1.0 Sept 23, 2015

  • Initial implementation