Очереди хранения Azure и форма сообщения - PullRequest
0 голосов
/ 15 ноября 2018

Я осмотрелся и обыскал, и не могу найти ничего, что решает эту проблему, поэтому, если мой Google Fu не помог мне, просто укажите мне правильное направление.

Мы используем очереди хранения Azure для запускавыполнение функций Azure (V2).(Я не верю, что это использование уместно, но я включил его на всякий случай.) В ходе разработки функции «форма» входных данных изменилась (я использую объекты C # POCO и сериализациюих в JSON для создания содержимого сообщения очереди.)

Я обнаружил, что после отправки изменения кода в Azure очередь хранения продолжает отправлять сообщение JSON в функцию в старомобъект JSON в формате - хотя JSON, предоставленный для очереди хранения, был в новом формате.

Исправление было достаточно простым - удалите очередь и дайте программному коду заново ее создать.Однако здесь есть большая путаница:

  1. Очереди хранения Azure принимают сообщения в качестве строковых значений, так почему же вообще присоединяется «схема»?Я понимаю, что сообщение в конечном итоге предоставляется в CloudQueueMessage объекте, поэтому, вероятно, за кулисами происходит нечто вроде JSON.Но ...
  2. Если он есть (и он наверняка есть), почему Очередь хранения принимает и успешно обрабатывает сообщение, не соответствующее этому формату?Во всяком случае, я ожидал, что сообщение попадет в очередь ядов, а не попытка «перевести» входящее сообщение в схему.
  3. Есть ли способ справиться с этим «в коде»(кроме написания связки моего собственного кода для «проверки схемы»)?
  4. Что бы произошло, если бы я предоставил простое строковое значение?(Это действительно больше любопытства для меня, чем что-либо еще ...)

Любые ответы, которые кто-либо может дать / указать мне, будут с благодарностью.

1 Ответ

0 голосов
/ 16 ноября 2018

Возможно, вы ошиблись в содержании сообщения с CloudQueueMessage объектом.

В коде мы обычно обрабатываем содержимое сообщения / текст / тело, содержащее информацию, которую мы хотим обработать. В вашем случае, то есть C # POCO и сериализованная полезная нагрузка Json.

Когда мы создаем сообщение очереди в очереди хранения Azure, Azure заполняет несколько свойств. CloudQueueMessage объект состоит из содержимого сообщения и этих свойств. Они используются для управления поведением сообщений в очереди при обработке его содержимого, проверьте документ на их использование.

    public static long MaxMessageSize { get; }
    public static TimeSpan MaxVisibilityTimeout { get; }
    public static int MaxNumberOfMessagesToPeek { get; }
    public string Id { get; }
    public string PopReceipt { get; }
    public DateTimeOffset? InsertionTime { get; }
    public DateTimeOffset? ExpirationTime { get; }
    public DateTimeOffset? NextVisibleTime { get; }
    public int DequeueCount { get; }

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

  • Object - среда выполнения функций десериализует полезную нагрузку JSON в экземпляр произвольного класса, определенного в вашем коде.
  • строка
  • байт [] * * тысячу двадцать-один
  • CloudQueueMessage
...