Nano Hash - криптовалюты, майнинг, программирование

Веб-задания Azure - параллельная обработка сообщений из очередей не работает должным образом

Мне нужно подготовить комнаты для групп SharePoint Online, используя лазурные очереди и веб-задания. Я создал консольное приложение и опубликовал его как непрерывное веб-задание со следующими настройками:

            config.Queues.BatchSize = 1;

            config.Queues.MaxDequeueCount = 4;

            config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15);

            JobHost host = new JobHost();

            host.RunAndBlock();

Функция триггера выглядит так:

public static void TriggerFunction([QueueTrigger("messagequeue")]CloudQueueMessage message)
    {
        ProcessQueueMsg(message.AsString);
    }

Внутри функции ProcessQueueMsg я десериализую полученное json-сообщение в классе и выполняю следующие операции:

  • Я создаю дополнительный сайт в существующем семействе сайтов;
  • Используя механизм подготовки Pnp, я подготавливаю контент на дополнительном сайте (списки, файлы для загрузки, разрешения, быстрый обед и т. Д.).

Если в очереди мне нужно обработать только одно сообщение, все работает правильно.

Однако, когда я отправляю два сообщения в очереди с задержкой в ​​несколько секунд, в то время как первое сообщение обрабатывается, следующее перезаписывает свойства класса, и первое сообщение завершается.

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

Пытался также ограничить количество потоков до 1 и использовать семафор, но имел такое же поведение:

private const int NrOfThreads = 1;
private static readonly SemaphoreSlim semaphore_ = new SemaphoreSlim(NrOfThreads, NrOfThreads);

//Inside TriggerFunction

           try
            {
                semaphore_.Wait();

                new Thread(ThreadProc).Start();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e);
            }

public static void ThreadProc()
        {
            try
            {
                DoWork();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(">>> Error: {0}", e);
            }
            finally
            {
                // release a slot for another thread
                semaphore_.Release();
            }
        }

        public static void DoWork()
        {
            Console.WriteLine("This is a web job invocation: Process Id: {0}, Thread Id: {1}.", System.Diagnostics.Process.GetCurrentProcess().Id, Thread.CurrentThread.ManagedThreadId);
            ProcessQueueMsg();
            Console.WriteLine(">> Thread Done. Processing next message.");
        }

Есть ли способ запустить свою функцию обработки для параллельных сообщений, чтобы обеспечить работу моих сайтов без вмешательства?

Пожалуйста, дайте мне знать, если вам нужны более подробные сведения.

Заранее спасибо!


Ответы:


1

Вы не передаете объект конфигурации вашему JobHost при создании - поэтому ваши настройки конфигурации не имеют эффекта. Измените свой код на:

JobHost host = new JobHost(config);
host.RunAndBlock();
16.03.2017
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..