Масштабирует служебную шину Azure, устанавливая повторяющееся расписание

#azureservicebus #masstransit #azure-scheduler

#azureservicebus #масштабирует #azure-планировщик

Вопрос:

Возможно ли установить повторяющееся расписание для доставки сообщений через MassTransit, работающий на служебной шине?

Если да, доступен ли какой-либо пример кода?

Или лучше создать службу, похожую на службу планировщика Quartz, но предназначенную для планировщика Azure?

Комментарии:

1. Мне приходит в голову, что было бы проще использовать Azure Scheduler для запуска функции, которая, в свою очередь, отправляет сообщение на служебную шину. Тогда не нужно было бы думать о структуре сообщений для масштабирования. Если это имеет смысл.

2. Использование Azure Scheduler для запуска функции было бы хорошим подходом.

Ответ №1:

Если вы используете Azure, у вас есть три варианта,

  1. Приложения Azure Logic (замена Azure scheduler — читайте здесь)
  2. Функции Azure
  3. Веб-задания

В приложениях Azure Logic можно создать рабочий процесс для переноса даты с помощью триггера «повторяемость».

В функциях Azure вы можете использовать запуск таймера и написать свою собственную логику, используя SDK для служебной шины Azure / REST API. Вы можете найти более подробную информацию о запуске таймера здесь для скрипта C #, но вы также можете использовать JS, F # и т.д. В случае, если вы используете функцию Azure, если запланированное время выполняется каждые 5 минут, function.json будет закодировано следующим образом

 {
    "schedule": "0 */5 * * * *",
    "name": "myTimer",
    "type": "timerTrigger",
    "direction": "in"
}
  

Код для функции будет примерно таким, как показано ниже

 public static void Run(TimerInfo myTimer, ILogger log)
{
    const string ServiceBusConnectionString = "<your_connection_string>";
    const string QueueName = "<your_queue_name>";
    static IQueueClient queueClient

    if (myTimer.IsPastDue)
    {
        log.LogInformation("Timer is running late!");
    }
    queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

    // Your logic to read to write message
}
  

Я использую .NET SDK для служебной шины Azure, вы можете найти ссылку здесь. Если вы новичок в функциях Azure, функция C # scripting работает немного по-другому. Подход ссылки на dll отличается. Вы можете найти это здесь.

Когда дело доходит до веб-заданий Azure, они выполняются как часть веб-приложений Azure. Для веб-задания Azure вы также можете написать веб-задание, используя шаблон консольного приложения. Вы также можете использовать тот же пакет SDK Azure Service Bus, о котором говорилось выше, для разработки веб-задания. Найдите документацию веб-заданий Azure здесь.

Комментарии:

1. Спасибо Isham за ваше время, но мой вопрос не столько о том, как закодировать функцию Azure (я согласен с этим), сколько о планировании повторяющегося сообщения с помощью MassTransit, запущенного на служебной шине Azure. Раньше я бы использовал Quartz Scheduler с MT на RabbitMQ, но мы переходим на Azure, и нам нужна та же функциональность. Запуск функции, которая выполняет всю работу по общению с MT вместо того, чтобы пытаться отправить сообщение MT из планировщика Azure. Этот подход, похоже, пока хорошо работает для меня.

2. Меня беспокоит только то, что планировщик Azure удаляется. Вы пробовали приложения Logic? Но в приложениях Logic apps существует определенная цена, а с функциями и веб-заданиями вы можете использовать их бесплатно до определенной степени.