def test_consumers_shutdown_is_called_when_erroring(self): channel = MagicMock(name='channel') msg = MagicMock(name='msg') result, consumer = create_error_consumer() cp = ConsumerPool(channel, consumer, gevent.Greenlet) cp.handle(msg) result.get(timeout=1)
def test_consumers_consume_is_run(self): channel = MagicMock(name='channel') msg = MagicMock(name='msg') result, consumer = create_working_consumer() cp = ConsumerPool(channel, consumer, gevent.Greenlet) cp.handle(msg) result.get(timeout=1)
def test_channel_reject_is_not_called_when_erroring_after_ack(self): channel = MagicMock(name='channel') msg = MagicMock(name='msg') result, consumer = create_acking_error_consumer() cp = ConsumerPool(channel, consumer, gevent.Greenlet) cp.handle(msg) result.get(timeout=1) tag = msg.delivery_info['delivery_tag'] self.assertEqual(channel.basic.reject.mock_calls, [])
def test_channel_reject_is_called_when_erroring(self): channel = MagicMock(name='channel') msg = MagicMock(name='msg') result, consumer = create_error_consumer() cp = ConsumerPool(channel, consumer, gevent.Greenlet) cp.handle(msg) result.get(timeout=1) tag = msg.delivery_info['delivery_tag'] channel.basic_reject.assert_called_once_with(tag, requeue=True)
def test_creates_consumer_specific_number_of_times(self): i = 3 ConsumerPool( self.channel, self.consumer_class, self.greenlet_maker, i, ) calls = [call() for _ in range(i)] self.consumer_class.assert_has_calls(calls)
def setup(logger_name, connector, connect_to_hosts): logger = logging.getLogger('amqp-dispatcher') args = get_args_from_cli() config = yaml.safe_load(open(args.config).read()) startup_handler_str = config.get('startup_handler') if startup_handler_str is not None: startup_handler = load_module_object(startup_handler_str) startup_handler() logger.info('Startup handled') random_generator = random.SystemRandom() random_string = ''.join([ random_generator.choice(string.ascii_lowercase) for i in range(10) ]) connection_name = '{0}-{1}-{2}'.format( socket.gethostname(), os.getpid(), random_string, ) hosts, user, password, vhost, port, heartbeat = parse_env() rabbit_logger = logging.getLogger(logger_name) rabbit_logger.setLevel(logging.INFO) conn = connect_to_hosts( connector, hosts, port=port, transport='gevent', user=user, password=password, vhost=vhost, logger=rabbit_logger, heartbeat=heartbeat, client_properties={ 'connection_name': connection_name, }, ) if conn is None: logger.warning("No connection -- returning") return queues = config.get('queues') if queues: create_and_bind_queues(conn, queues) conn = proxy_connection(conn) conn.add_on_close_callback(create_connection_closed_cb(conn)) # Create message channel channel = conn.channel() channel = proxy_channel(channel) channel.add_close_listener(channel_closed_cb) for consumer in config.get('consumers', []): queue_name = consumer['queue'] prefetch_count = consumer.get('prefetch_count', 1) consumer_str = consumer.get('consumer') consumer_count = consumer.get('consumer_count', 1) consumer_klass = load_consumer(consumer_str) consume_channel = conn.channel() consume_channel = proxy_channel(consume_channel) consume_channel.basic_qos(prefetch_count=prefetch_count) pool = ConsumerPool( consume_channel, consumer_klass, gevent.Greenlet, consumer_count ) consume_channel.basic_consume( consumer_callback=pool.handle, queue=queue_name, no_ack=False, ) gevent.sleep() message_pump_greenlet = gevent.Greenlet( message_pump_greenthread, conn) return message_pump_greenlet