Служебная шина Azure — удаление определенного сообщенияC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Служебная шина Azure — удаление определенного сообщения

Сообщение Anonymous »

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

У меня есть X рабочих ролей, затем я проверяю очереди и обрабатываю данные.< /p>

Я не ожидаю, что в очереди будет много сообщений, поскольку цель состоит в том, чтобы обработать сообщение, завершить его, а затем снова добавить то же сообщение, но запланированное на Х минут времени. Это даст мне возможность продолжить обработку этих задач.

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

Что я хочу, так это представить список сообщений в очереди (что я сделали с помощью PeekBatch) в веб-интерфейсе. Затем я хочу иметь возможность выбрать некоторые/все сообщения и удалить их.

Я могу сделать это, если в коде есть ошибка, и я хочу чтобы остановить сообщения определенного типа.

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

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

Редактировать:

У меня есть кое-что, что работает, но это на самом деле это не лучшее решение:

Код: Выделить всё

    public void DeleteMessages(List messageIds)
{
foreach (var msg in Client.ReceiveBatch(100))
{
if (messageIds.Contains(msg.SequenceNumber))
msg.Complete(); // Deletes the message
else
msg.Abandon(); // Puts it back in the queue
}
}
По мере увеличения очереди это будет становиться все менее и менее эффективным, но, по крайней мере, оно останавливает все действия во время выполнения вызова удаления и удаляет указанные сообщения.

p>

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

В Microsoft сообщили мне, что в настоящее время они работают над API для удаления определенных сообщений, которые должны быть доступны через несколько месяцев. А пока все дело в обходных путях.

Июньское обновление:

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

Объект, который я помещаю в сообщение, имеет новое свойство:

Код: Выделить всё

Guid? MessageId { get; set; }
Обратите внимание, что Guid имеет значение NULL, просто чтобы обеспечить обратную совместимость

Когда я хочу удалить сообщение, я добавляю свой MessageId в таблицу базы данных «DeletedMessage».

Когда дело доходит до обработки сообщения, я просматриваю таблицу DeletedMessage на предмет соответствия Руководство, и если оно его найдет, я просто Complete() сообщение без выполнения обычной обработки.

Это работает хорошо, но требует небольших накладных расходов. Если вы не имеете дело с огромным количеством сообщений, это не большая проблема.

Также обратите внимание, что изначально я сделал это, используя SequenceNumber, но (как ни странно) SequenceNumber изменяется. между просмотром и получением сообщения! Это не позволит этой идее работать, если вы не используете свой собственный идентификатор, как указано выше.

Подробнее здесь: https://stackoverflow.com/questions/270 ... ic-message
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Служебная шина Azure — сообщение от отправителя дважды ставится в очередь
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Срок действия аутентификации CBS истек — служебная шина Azure
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Срок действия аутентификации CBS истек — служебная шина Azure
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Шина событий Vertx и масштабирование Hazelcast
    Гость » » в форуме JAVA
    0 Ответы
    64 Просмотры
    Последнее сообщение Гость
  • Шина событий Vertx и масштабирование Hazelcast
    Гость » » в форуме JAVA
    0 Ответы
    76 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»