У меня есть работа, которая импортирует файлы в систему. Каждый раз, когда файл импортируется, мы создаем большой двоичный объект в Azure и отправляем сообщение с инструкциями в очередь, чтобы данные соответственно сохранялись в SQL. Мы делаем это, используя azure-webjobs
и azure-webjobssdk
.
Мы столкнулись с проблемой, из-за которой после того, как сообщения не прошли более 7 раз, они не перемещались в очередь отравления, как ожидалось. Код следующий:
Program.cs
public class Program
{
static void Main()
{
//Set up DI
var module = new CustomModule();
var kernel = new StandardKernel(module);
//Configure JobHost
var storageConnectionString = AppSettingsHelper.Get("StorageConnectionString");
var config = new JobHostConfiguration(storageConnectionString) { JobActivator = new JobActivator(kernel), NameResolver = new QueueNameResolver() };
config.Queues.MaxDequeueCount = 7;
config.UseTimers();
//Pass configuration to JobJost
var host = new JobHost(config);
host.RunAndBlock();
}
}
Функции.cs
public class Functions
{
private readonly IMessageProcessor _fileImportQueueProcessor;
public Functions(IMessageProcessor fileImportQueueProcessor)
{
_fileImportQueueProcessor = fileImportQueueProcessor;
}
public async void FileImportQueue([QueueTrigger("%fileImportQueueKey%")] string item)
{
await _fileImportQueueProcessor.ProcessAsync(item);
}
}
_fileImportQueueProcessor.ProcessAsync(item)
выдало исключение, и количество удаленных из очереди сообщений было должным образом увеличено и повторно обработано. Однако он так и не был перемещен в очередь на яд. Я приложил скриншот очередей с числом исключений из очереди более 50.
После нескольких сбоев веб-задание застряло в состоянии ожидания перезапуска, и я не смог ни остановить, ни запустить, и в итоге я полностью его удалил. После локального запуска веб-задания я увидел, что сообщения обрабатываются (я предположил, что сообщения с числом исключений из очереди более 7 должны были быть перемещены в очередь отравлений). Любые идеи о том, почему это происходит и что можно сделать, чтобы иметь желаемое поведение.
Спасибо,
Обновление. Приведенное ниже решение Вивьен сработало.
Мэтью был достаточно любезен, чтобы сделать PR-рассылку, посвященную этой проблеме. Вы можете ознакомиться с PR здесь.