#!/usr/bin/env python # -*- coding: utf-8 -*- import argparse import errno import os import ssl import sys import pika SSL_PROTOCOLS = {'TLSv1': ssl.PROTOCOL_TLSv1} try: SSL_PROTOCOLS.update({'TLSv1_1': ssl.PROTOCOL_TLSv1_1}) SSL_PROTOCOLS.update({'TLSv1_2': ssl.PROTOCOL_TLSv1_2}) except: pass def consumer_callback(channel, method, header, body): """ """ print('Received message:\n{0}'.format(body)) print(type(method)) print(type(header)) channel.basic_ack(delivery_tag=method.delivery_tag) def main(): """ """ parser = argparse.ArgumentParser( description='The following options are available') parser.add_argument( '-c', '--ciphers', metavar='CIPHERS', type=str, dest='ciphers', default=None, help='Preferred ciphers list (default: auto)') parser.add_argument( '-H', '--hostname', metavar='HOSTNAME/IP', type=str, dest='hostname', default='localhost', help='MQ hostname / IP address (default: localhost)') parser.add_argument( '-q', '--queue', metavar='QUEUE', type=str, dest='queue', default='amqp_queue', help='Queue (default: amqp_queue)') parser.add_argument( '-P', '--port', metavar='PORT', type=int, dest='port', default=5672, help='AMQP port (default: 5672)') parser.add_argument( '-p', '--password', metavar='PASSWORD[FILE]', type=str, dest='password', default='', help='BEINC taget-password / text-file containing the target password' ' (default & recommended: prompt for passwd)') if sys.hexversion >= 0x20709f0: parser.add_argument( '-S', '--ssl-version', metavar='VERSION', type=str, dest='ssl_version', default='TLSv1', help='Use SSL version: "TLSv1" (default), "TLSv1_1", "TLSv1_2"') else: parser.add_argument( '-S', '--ssl-version', metavar='VERSION', type=str, dest='ssl_version', default='TLSv1', help='Use SSL version: "TLSv1" (default)') parser.add_argument( '-s', '--ssl', action='store_true', dest='ssl', default=False, help='Use TLS/SSL') parser.add_argument( '-t', '--consumer-tag', metavar='TAG', type=str, dest='consumer_tag', default='amqp_test', help='Consumer tag (default: amqp_test)') parser.add_argument( '-u', '--username', metavar='USERNAME', type=str, dest='username', default='amqp_user', help='Subscriber username (default: amqp_user)') parser.add_argument( '-V', '--vhost', metavar='VHOST', type=str, dest='vhost', default='/', help='Vhost (default: /)') args = parser.parse_args() if not args.password: try: args.password = getpass.getpass() except Exception as e: sys.stderr.write('Prompt terminated\n') sys.exit(errno.EACCES) elif os.path.isfile(args.password): try: with open(args.password, 'r') as fp: passwd = fp.readline() if passwd.strip(): args.password = passwd.strip() except Exception as e: sys.stderr.write('Unable to open password file: {0}'.format(e)) sys.exit(1) creds_broker = pika.PlainCredentials(args.username, args.password) ssl_options = { 'ssl_version': SSL_PROTOCOLS.get(args.ssl_version, ssl.PROTOCOL_TLSv1), 'ciphers': args.ciphers} conn_params = pika.ConnectionParameters(args.hostname, args.port, virtual_host=args.vhost, ssl=args.ssl, ssl_options=ssl_options, credentials=creds_broker) conn_broker = pika.BlockingConnection(conn_params) channel = conn_broker.channel() channel.basic_consume( consumer_callback, # the callback callable queue=args.queue, # the queue to consume from no_ack=False, # tell the broker to not expect a response exclusive=False, # don¡¯t allow other consumers on the queue consumer_tag=args.consumer_tag) print('Consumer active!') channel.start_consuming() if __name__ == '__main__': main()