|
@@ -592,11 +592,29 @@ class Tasks(bootsteps.StartStopStep):
|
|
|
|
|
|
def start(self, c):
|
|
|
c.update_strategies()
|
|
|
+
|
|
|
+ # - RabbitMQ 3.3 completely redefines how basic_qos works..
|
|
|
+ # This will detect if the new qos smenatics is in effect,
|
|
|
+ # and if so make sure the 'apply_global' flag is set on qos updates.
|
|
|
+ qos_global = not (
|
|
|
+ c.connection.transport.qos_semantics_matches_spec(
|
|
|
+ c.connection.connection))
|
|
|
+
|
|
|
+ # set initial prefetch count
|
|
|
+ c.connection.default_channel.basic_qos(
|
|
|
+ 0, c.initial_prefetch_count, qos_global,
|
|
|
+ )
|
|
|
+
|
|
|
c.task_consumer = c.app.amqp.TaskConsumer(
|
|
|
c.connection, on_decode_error=c.on_decode_error,
|
|
|
)
|
|
|
- c.qos = QoS(c.task_consumer.qos, c.initial_prefetch_count)
|
|
|
- c.qos.update() # set initial prefetch count
|
|
|
+
|
|
|
+ def set_prefetch_count(prefetch_count):
|
|
|
+ return c.task_consumer.qos(
|
|
|
+ prefetch_count=prefetch_count,
|
|
|
+ apply_global=qos_global,
|
|
|
+ )
|
|
|
+ c.qos = QoS(set_prefetch_count, c.initial_prefetch_count)
|
|
|
|
|
|
def stop(self, c):
|
|
|
if c.task_consumer:
|