Quartz Scheduler не обновляется на удаленном сервере - PullRequest
0 голосов
/ 30 августа 2018

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

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

что-то нужно скопировать на удаленный сервер есть ли настройка, которую мне нужно установить.

так я реализовал вытягивание обменного курса.

public class JobScheduler
{
    public static async Task Start()
    {
        ISchedulerFactory factory = new StdSchedulerFactory();
        IScheduler scheduler = await factory.GetScheduler();

        IJobDetail job = JobBuilder.Create<HelloJob>()
            .WithIdentity("name", "group")
            .UsingJobData("Name", "Bob")
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
            .WithDailyTimeIntervalSchedule
            (s => 
            s.WithIntervalInHours(24)
            .OnEveryDay()
            .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(14,08))
            )
            .Build();
        await scheduler.ScheduleJob(job, trigger);
        await scheduler.Start();
        //Thread.Sleep(TimeSpan.FromMinutes(10));
        //await scheduler.Shutdown();
    }
}


public class HelloJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        DateTime now = DateTime.Now;
        var rate = GetRate();

        if (rate != 0)
        {
            System.Diagnostics.Debug.WriteLine($"Exchange Rate: {rate}");

            using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Default"].ConnectionString))
            {
                if (connection.State == System.Data.ConnectionState.Closed)
                    await connection.OpenAsync();
                var cmd = new SqlCommand($"SELECT Value FROM AppConfigurations WHERE Name = '{AppConfigarationItems.FallBackExchangeRate}'", connection);

                object value = cmd.ExecuteScalar();

                if (value == null)
                {
                    var sql = $@"INSERT INTO AppConfigurations (Name,Value,DoubleValue,LastUpdateDate)
                             VALUES ('{AppConfigarationItems.FallBackExchangeRate}','{rate.ToString().Replace(',', '.')}',{rate.ToString().Replace(',', '.')},'{now}')";
                    cmd = new SqlCommand(sql, connection);

                    int result = cmd.ExecuteNonQuery();
                }
                else
                {
                    var sql = $@"UPDATE AppConfigurations 
                             SET Value = '{rate.ToString().Replace(',', '.')}',
                             DoubleValue = {rate.ToString().Replace(',', '.')},
                             LastUpdateDate = '{now}'
                             WHERE Name = '{AppConfigarationItems.FallBackExchangeRate}'";
                    cmd = new SqlCommand(sql, connection);

                    int result = cmd.ExecuteNonQuery();


                }
            }
        }
    }




    protected override void Application_Start(object sender, EventArgs e)
    {
        System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("en-ZA");
        AbpBootstrapper.IocManager.IocContainer.AddFacility<LoggingFacility>(f => f.UseLog4Net().WithConfig("log4net.config"));
        base.Application_Start(sender, e);
        JobScheduler.Start().Wait();
    }

1 Ответ

0 голосов
/ 30 августа 2018

Может иметь или не иметь какое-то отношение к IIS и способам, которыми он обрабатывает переработку пула приложений

Это работало для меня в прошлом.

  1. Зайдите в диспетчер IIS -> Пулы приложений -> Создайте новый пул, назовите его как хотите

  2. Выбор пула планировщика -> дополнительные настройки

  3. В общем разделе в режиме запуска выберите AlwaysRunning или true (в зависимости от версии IIS)

  4. В разделе Модель процесса-> Время простоя (в минутах) установлено значение 0 (означает: нет идеального времени ожидания)

  5. В разделе «Переработка» -> «Интервал обычного времени» установлен на 0 (что означает: нет переработки)

  6. Разверните свой сайт Quartz в пуле приложений.

  7. Отправьте один запрос в пул, чтобы «разбудить ваше приложение», и оно будет работать до тех пор, пока вы его не остановите.

Есть также некоторые инструменты, которые вы можете установить на хост-сервере, такие как Keep Alive server для IIS 6.0 и 7.5 , они будут поддерживать работоспособность приложения после перезапуска пула приложений и избавят от необходимости менять или настраивать тоже много конфигураций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...