programing

Quartz 사용법메일을 트리거하는 작업을 예약하기 위해 ASP.NET을 사용하는 net?

megabox 2023. 7. 3. 22:40
반응형

Quartz 사용법메일을 트리거하는 작업을 예약하기 위해 ASP.NET을 사용하는 net?

ASP.NET에서 Quartz.dll을 사용하는 방법을 모르겠습니다.매일 아침 메일을 트리거하는 작업을 예약하기 위한 코드는 어디에 작성해야 합니까?

수행할 작업과 설정 방법에 따라 몇 가지 옵션이 있습니다.예를 들어 Quartz를 설치할 수 있습니다.Net 서버를 독립 실행형 Windows 서비스로 사용하거나 asp.net 응용 프로그램에 포함시킬 수도 있습니다.

임베디드로 실행하려면 다음과 같이 global.asax로 서버를 시작할 수 있습니다(소스 코드 예제 #12 참조).

NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "RemoteServer";

// set thread pool info
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = "5";
properties["quartz.threadPool.threadPriority"] = "Normal";

ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();
sched.Start();

서비스로 실행하는 경우 다음과 같이 원격으로 연결할 수 있습니다(예: #12).

NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "RemoteClient";

// set thread pool info
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = "5";
properties["quartz.threadPool.threadPriority"] = "Normal";

// set remoting expoter
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler";
// First we must get a reference to a scheduler
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();

스케줄러에 대한 참조가 있으면(원격을 통해 또는 포함된 인스턴스가 있기 때문에) 다음과 같은 작업을 예약할 수 있습니다.

// define the job and ask it to run
JobDetail job = new JobDetail("remotelyAddedJob", "default", typeof(SimpleJob));
JobDataMap map = new JobDataMap();
map.Put("msg", "Your remotely added job has executed!");
job.JobDataMap = map;
CronTrigger trigger = new CronTrigger("remotelyAddedTrigger", "default", "remotelyAddedJob", "default", DateTime.UtcNow, null, "/5 * * ? * *");
// schedule the job
sched.ScheduleJob(job, trigger);

여기 Quartz를 시작하는 사람들을 위해 제가 쓴 몇 가지 게시물에 대한 링크가 있습니다.인터넷: http://jvilalta.blogspot.com/2009/03/getting-started-with-quartznet-part-1.html

몇 주 전에 Quartz를 사용하는 것에 대해 썼습니다.Net - 윈도우즈 Azure 작업자 역할에서 작업을 예약합니다.그 이후로 저는 Quartz 주변에 포장지를 만들도록 강요하는 요구 사항에 부딪혔습니다.Net IS 스케줄러.작업 예약은 Cloud Configuration Manager에서 예약 문자열을 읽고 작업을 예약하는 역할을 합니다.

Cloud Configuration Manager는 역할의 구성 파일에서 설정을 읽습니다. 이 파일은 클라우드 서비스의 구성 섹션에 있는 윈도우즈 Azure Management Portal을 통해 편집할 수 있습니다.

다음 예제에서는 매일 오전 6시, 오전 8시, 오전 10시, 오후 12시 30분 및 오후 4시 30분에 실행해야 하는 작업을 예약합니다.스케줄은 Visual Studio를 통해 편집할 수 있는 역할 설정에 정의되어 있습니다.역할 설정에 도달하려면 Windows Azure Cloud Service 프로젝트로 이동하여 역할 폴더에서 원하는 역할 구성을 찾습니다.구성 파일을 두 번 클릭하여 구성 편집기를 연 다음 '설정' 탭으로 이동합니다.설정 추가'를 클릭하고 새 설정의 이름을 'JobDailySchedule'로 지정하고 값을 6:0;8:0;10:0;12:30;16:30;

The code from this Post is part of the Brisebois.WindowsAzure NuGet Package

To install Brisebois.WindowsAzure, run the following command in the Package Manager Console

PM> Install-Package Brisebois.WindowsAzure

Get more details about the Nuget Package.

그런 다음 작업 예약을 사용하여 역할의 구성 파일에 정의된 예약을 사용하여 일일 작업을 예약합니다.

var schedule = new JobSchedule();

schedule.ScheduleDailyJob("JobDailySchedule",
                            typeof(DailyJob));

DailyJob 구현은 다음과 같습니다.이것은 데모이기 때문에, 저는 특정한 논리를 작업에 추가하지 않을 것입니다.

public class DailyJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        //Do your daily work here
    }
}

작업 일정이 쿼츠를 마무리합니다.Net IS 스케줄러.이전 게시물에서 제가 타사 도구를 포장하는 것의 중요성에 대해 언급한 적이 있는데, 이는 제가 작업 일정 로직을 포함하고 있기 때문에 작업 일정을 사용하는 코드에 영향을 미치지 않고 이 로직을 잠재적으로 변경할 수 있기 때문입니다.

작업 예약은 역할이 시작될 때 구성되어야 하며 작업 예약 인스턴스는 역할의 수명 동안 유지되어야 합니다.일정 변경은 클라우드 서비스의 구성 섹션 아래에 있는 윈도우즈 Azure 관리 포털을 통해 'JobDailySchedule' 설정을 변경하여 수행할 수 있습니다.그런 다음 새 일정을 적용하려면 클라우드 서비스의 인스턴스 섹션 아래에 있는 윈도우즈 Azure 관리 포털을 통해 역할 인스턴스를 다시 시작합니다.

public class JobSchedule
{
    private readonly IScheduler sched;

    public JobSchedule()
    {
        var schedFact = new StdSchedulerFactory();

        sched = schedFact.GetScheduler();
        sched.Start();
    }

    /// <summary>
    /// Will schedule jobs in Eastern Standard Time
    /// </summary>
    /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, 
    ///                              value format "hh:mm;hh:mm;"</param>
    /// <param name="jobType">must inherit from IJob</param>
    public void ScheduleDailyJob(string scheduleConfig, 
                                 Type jobType)
    {
        ScheduleDailyJob(scheduleConfig, 
                         jobType, 
                         "Eastern Standard Time");
    }

    /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, 
    ///                              value format "hh:mm;hh:mm;"</param>
    /// <param name="jobType">must inherit from IJob</param>
    public void ScheduleDailyJob(string scheduleConfig, 
                                 Type jobType, 
                                 string timeZoneId)
    {
        var schedule = CloudConfigurationManager.GetSetting(scheduleConfig);
        if (schedule == "-")
            return;

        schedule.Split(';')
                .Where(s => !string.IsNullOrWhiteSpace(s))
                .ToList()
                .ForEach(h =>
        {
            var index = h.IndexOf(':');
            var hour = h.Substring(0, index);
            var minutes = h.Substring(index + 1, h.Length - (index + 1));

            var job = new JobDetailImpl(jobType.Name + hour + minutes, null,
                                        jobType);

            var dh = Convert.ToInt32(hour, CultureInfo.InvariantCulture);
            var dhm = Convert.ToInt32(minutes, CultureInfo.InvariantCulture);
            var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);

            var cronScheduleBuilder = CronScheduleBuilder
                                            .DailyAtHourAndMinute(dh, dhm)
                                            .InTimeZone(tz);
            var trigger = TriggerBuilder.Create()
                                        .StartNow()
                                        .WithSchedule(cronScheduleBuilder)
                                        .Build();

            sched.ScheduleJob(job, trigger);
        });
    }

    /// <summary>
    /// Will schedule jobs in Eastern Standard Time
    /// </summary>
    /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, 
    ///                              value format "hh:mm;hh:mm;"</param>
    /// <param name="jobType">must inherit from IJob</param>
    public void ScheduleWeeklyJob(string scheduleConfig, 
                                  Type jobType)
    {
        ScheduleWeeklyJob(scheduleConfig, 
                          jobType, 
                          "Eastern Standard Time");
    }


    /// <param name="scheduleConfig">Setting Key from your CloudConfigurations,
    ///                              value format "hh:mm;hh:mm;"</param>
    /// <param name="jobType">must inherit from IJob</param>
    public void ScheduleWeeklyJob(string scheduleConfig, 
                                  Type jobType, 
                                  string timeZoneId)
    {
        var schedule = CloudConfigurationManager.GetSetting(scheduleConfig);

        schedule.Split(';')
                .Where(s => !string.IsNullOrWhiteSpace(s))
                .ToList()
                .ForEach(h =>
        {
            var index = h.IndexOf(':');
            var hour = h.Substring(0, index);
            var minutes = h.Substring(index + 1, h.Length - (index + 1));

            var job = new JobDetailImpl(jobType.Name + hour + minutes, null,
                                        jobType);

            var dh = Convert.ToInt32(hour, CultureInfo.InvariantCulture);
            var dhm = Convert.ToInt32(minutes, CultureInfo.InvariantCulture);
            var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
            var builder = CronScheduleBuilder
                            .WeeklyOnDayAndHourAndMinute(DayOfWeek.Monday, 
                                                         dh, 
                                                         dhm)
                            .InTimeZone(tz);

            var trigger = TriggerBuilder.Create()
                                        .StartNow()
                                        .WithSchedule(builder)
                                        .Build();

            sched.ScheduleJob(job, trigger);
        });
    }
}

언급URL : https://stackoverflow.com/questions/1356789/how-to-use-quartz-net-with-asp-net-for-scheduling-jobs-to-trigger-mail

반응형