Обновление сообщения через посредника, уже находящегося в очереди служебной шины Azure

Мы хотим иметь возможность хранить свойство в сообщении брокера очереди служебной шины, в котором хранится статус элемента; поэтому в тех случаях, когда элемент повторно обрабатывается по какой-либо причине, у нас есть запись, указывающая, куда в процессе он попал (улучшая нашу логику повторных попыток).

Итак, у нас есть приведенный ниже код для получения элемента из очереди:

var brokeredMessage = 
    _queueClient.Receive(TimeSpan.FromSeconds(DEFAULT_WAIT_TIME_IN_SECONDS));

Затем мы хотим настроить свойство, чтобы оно содержало перечисление состояния следующим образом:

brokeredMessage.Properties.Add("Status", MessageStatusEnum.MessageReceived);

Можно ли сохранить свойство new/update в сообщении Brokered, как это, должен ли быть вызван дополнительный метод, или любые изменения, внесенные в свойства, будут потеряны после его получения?


person Luke Merrett    schedule 11.07.2013    source источник


Ответы (1)


Сегодня у нас нет возможности обновлять существующие сообщения через посредников в очереди. Вы можете добавлять свойства к существующему сообщению через посредника, но только тогда, когда вы выполняете Abandon или DeadLetter операции с самим сообщением. См. http://msdn.microsoft.com/en-us/library/windowsazure/jj673129.aspx

Мы поддерживаем сценарии, в которых вы хотите сохранить ход рабочего процесса/группы сообщений через файл MessageSession. Здесь, по сути, вы включаете Sessions для очереди/подписки, а затем вместо обработки сообщений вызываете AcceptMessageSession. Свойство SessionID сообщения определяет, к какому сеансу оно принадлежит. Каждый сеанс имеет доступное состояние, к которому вы можете получить доступ через GetState и SetState на MessageSession. Также транзакции поддерживаются для всех этих операций, чтобы вы могли обеспечить надежные гарантии согласованности. Ниже приведен пример, демонстрирующий использование сеансов и состояния сеанса: http://code.msdn.microsoft.com/Brokered-Messaging-Session-41c43fb4

person Abhishek Lal    schedule 12.07.2013
comment
Это также можно сделать при отсрочке сейчас docs.microsoft.com/en-us/dotnet/api/ - person fsimonazzi; 03.01.2019