2015-04-13 11 views
4

Наш back-end собирает необработанные данные и перенаправляет их в очередь Azure Storage Queue. Мы хотели бы сделать две вещи с каждой очереди сообщений:Несколько функций Azure WebJob в сообщении с одной очередью?

  1. Вход/архивировать
  2. Разобрать и отправить разобранную результат в новой очереди

Чтобы держит вещи маленькие и четкие , мы хотели бы иметь две WebJob функции, указывающие на ту же очередь:

public static void ArchiveRawData([QueueTrigger("raw")] RawData data, [Blob("{Ticks}.dat")] out string raw) 
    { 
     raw = data.Data; 
    } 

    public static void ParseRawData([QueueTrigger("raw")] RawData data, [Queue("result")] out Parsed parsedData 
    { 
     var parsed = Parser.Parse(data.Data); 
     parsedData = parsed; 
    } 

Но это не работает: Либо ArchiveRawData, либо ParseRawData получает сообщение, , но не другое.

Есть ли вариант где-нибудь, что сделало бы описанный выше сценарий? Кажется, что сообщение теперь автоматически отменяется после завершения первой функции (независимо от того, какой из них). Но я думаю, что SDK WebJobs может обнаружить, что есть несколько функций с одним и тем же QueueTrigger, и это может привести к деактивации сообщения только после завершения всех функций.

Для того, чтобы обойти эту проблему, мы в настоящее время есть два выхода в одной функции:

public static void ParseRawData([QueueTrigger("raw")] RawData data, [Queue("result")] out Parsed parsedData, [Blob("{Ticks}.dat")] out string raw) 
    { 
     var parsed = Parser.Parse(data.Data); 
     parsedData = parsed; 
     raw = data.Data; 
    }     

Но, как я уже сказал, мы хотели бы, чтобы держать вещи маленький и простой, поэтому было бы здорово, если бы мы могли использование отдельный функция.

ответ

5

К сожалению, SDK не поддерживает несколько функций, прослушивающих одну и ту же очередь.

Если вы хотите вызвать несколько функций, просто создайте несколько методов и сделайте функцию webjob точкой входа. Тогда webjob вызовет эти функции.

В качестве альтернативы вы можете прослушивать вторую функцию в другой очереди. Первая очередь добавляет сообщение в эту очередь.

4

Если вы замените очередь хранения на тему ServiceBus Topic, вы можете поместить на нее два Подписки, по одному для каждого WebJob. Затем каждый WebJob получит свою собственную копию каждого сообщения.