A simple Python SQS utility package
Project description
This package takes care of the boilerplate involved in listening to an SQS queue, as well as sending messages to a queue. Works with python 2.7 & 3.6+.
Installation
pip install pySqsListener
Listening to a queue
Here is a basic code sample:
Standard Listener
from sqs_listener import SqsListener class MyListener(SqsListener): def handle_message(self, body, attributes, messages_attributes): run_my_function(body['param1'], body['param2']) listener = MyListener('my-message-queue', error_queue='my-error-queue', region_name='us-east-1') listener.listen()
Error Listener
from sqs_listener import SqsListener class MyErrorListener(SqsListener): def handle_message(self, body, attributes, messages_attributes): save_to_log(body['exception_type'], body['error_message'] error_listener = MyErrorListener('my-error-queue') error_listener.listen()
error_queue (str) - name of queue to push errors.
force_delete (boolean) - delete the message received from the queue, whether or not the handler function is successful. By default the message is deleted only if the handler function returns with no exceptions
interval (int) - number of seconds in between polls. Set to 60 by default
visibility_timeout (str) - Number of seconds the message will be invisible (‘in flight’) after being read. After this time interval it reappear in the queue if it wasn’t deleted in the meantime. Set to ‘600’ (10 minutes) by default
error_visibility_timeout (str) - Same as previous argument, for the error queue. Applicable only if the error_queue argument is set, and the queue doesn’t already exist.
wait_time (int) - number of seconds to wait for a message to arrive (for long polling). Set to 0 by default to provide short polling.
max_number_of_messages (int) - Max number of messages to receive from the queue. Set to 1 by default, max is 10
message_attribute_names (list) - message attributes by which to filter messages
attribute_names (list) - attributes by which to filter messages (see boto docs for difference between these two)
region_name (str) - AWS region name (defaults to us-east-1)
queue_url (str) - overrides queue parameter. Mostly useful for getting around this bug in the boto library
deserializer (function str -> dict) - Deserialization function that will be used to parse the message body. Set to python’s json.loads by default.
aws_access_key, aws_secret_key (str) - for manually providing AWS credentials
Running as a Daemon
Logging
logger = logging.getLogger('sqs_listener') logger.setLevel(logging.INFO) sh = logging.StreamHandler() formatstr = '[%(asctime)s - %(name)s - %(levelname)s] %(message)s' formatter = logging.Formatter(formatstr) sh.setFormatter(formatter) logger.addHandler(sh)
logger = logging.getLogger('sqs_listener') logger.setLevel(logging.INFO) sh = logging.FileHandler('mylog.log') sh.setLevel(logging.INFO) formatstr = '[%(asctime)s - %(name)s - %(levelname)s] %(message)s' formatter = logging.Formatter(formatstr) sh.setFormatter(formatter) logger.addHandler(sh)
Sending messages
Launcher Example
from sqs_launcher import SqsLauncher launcher = SqsLauncher('my-queue') response = launcher.launch_message({'param1': 'hello', 'param2': 'world'})
Important Notes
The environment variable AWS_ACCOUNT_ID must be set, in addition to the environment having valid AWS credentials (via environment variables or a credentials file) or if running in an aws ec2 instance a role attached with the required permissions.
For both the main queue and the error queue, if the queue doesn’t exist (in the specified region), it will be created at runtime.
The error queue receives only two values in the message body: exception_type and error_message. Both are of type str
If the function that the listener executes involves connecting to a database, you should explicitly close the connection at the end of the function. Otherwise, you’re likely to get an error like this: OperationalError(2006, 'MySQL server has gone away')
Either the queue name or the queue url should be provided. When both are provided the queue url is used and the queue name is ignored.
Contributing
Fork the repo and make a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file pySqsListener-0.9.0-py2.py3-none-any.whl
.
File metadata
- Download URL: pySqsListener-0.9.0-py2.py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6adb5361bb0425d547db75300cc52cd3bf0bededf116549c0de2d82eb705504 |
|
MD5 | dfff3d95185df4c582b0563953ea75c9 |
|
BLAKE2b-256 | d546f069543dd8870aee0591af773ce7f2e7bed7a77d3a6b8b586f9a04ef6c7a |