Работают ли приоритеты между очередями / пробками в Бинстальке?

Я немного сбит с толку относительно того, работают ли приоритеты на уровне работы или очереди / уровня. Причина, по которой я спрашиваю, состоит в том, что я использую модуль интеграции beanstalkd в Drupal. Этот модуль позволяет определять очереди / трубы и назначать значение приоритета для каждой создаваемой очереди / трубы.

Я пытаюсь понять следующее. Допустим, у меня есть две очереди / трубки в Beanstalkd (очередь A и очередь B). Если элементы, назначенные очереди A, имеют более высокий приоритет, чем элементы в очереди B, означает ли это, что элементы в очереди B будут обрабатываться только тогда, когда очередь A пуста?

1 ответ

Решение

Приоритеты для каждой работы, вы можете узнать больше об этом по адресу: https://github.com/kr/beanstalkd/blob/master/doc/protocol.txt

Без рабочих приоритетов beanstalkd работает как очередь FIFO.

Есть три серьезных факта, которые нужно знать о рабочих приоритетах:

  • Задания с номерами с более низким приоритетом резервируются перед заданиями с номерами с более высоким приоритетом.
  • Приоритеты beanstalkd - это 32-разрядные целые числа без знака (они варьируются от 0 до 2 ^ 32 - 1).
  • beanstalkd использует 2^31 в качестве приоритета задания по умолчанию (beanstalkd.DEFAULT_PRIORITY) (клиент может переопределить это, я видел значения по умолчанию, равные 1024).

Также обратите внимание, что в рамках одного и того же приоритетного задания все еще обрабатываются в режиме FIFO. Поэтому, если у вас есть агент, который просматривает несколько каналов, и когда вы получаете одинаковые приоритетные задания для этих каналов, они будут зарезервированы в FIFO-режиме.

Вы можете смотреть трубы и рабочие места с https://github.com/ptrofimov/beanstalk_console

Другие вопросы по тегам