跳過到頁腳內容
.NET幫助

Quartz .NET(對於開發者的運行原理)

Quartz.NET 介紹

.NET 應用程式中,Quartz.NET 是一個受歡迎的開源任務調度工具包。 它為程式設計師提供了強大的基礎,用於在預定的時間、間隔或響應觸發器時規劃和執行工作、計畫或流程。 無論是傳送通知、排程工作、生成報告或執行定期維護活動,Quartz.NET 都使在 .NET 應用程式中構建複雜的調度情境變得更容易。 Quartz.NET 非常適合作為工作排程系統,從小型應用程式到大規模企業系統的創建。

Quartz.NET 憑藉其最新的調度器版本,提供與各種支持的資料庫供應商的無縫整合,使開發者能夠使用方便的擴展方法擴展其功能,同時確保可靠的作業執行,作為一個託管服務。

通過將 Quartz.NET 與 IronPDF 融合,可以在 .NET 應用程式中構建具有強大 PDF 生成能力的可靠調度系統。 雖然 IronPDF 提供了創建、修改和顯示 PDF 文檔的完整工具套件,但 Quartz.NET 提供了一個靈活且可靠的調度系統。 結合使用時,它們使開發者能夠將 PDF 創建操作自動化,作為工作流程的一部分或排程背景工作,從而提高應用程式的實用性和功能性。

主要特點

靈活的排程

Quartz.NET 允許程式設計師創建排程,以告知程式在預定間隔或時間執行計畫(例如,每小時,每天,每 30 分鐘)。 它與複雜的排程模式兼容,例如 cron 表達式,可以精確控制程式碼、工作和服務的執行時間。

基於觸發器的執行

在 Quartz.NET 中,作業可以由多種類型的觸發器啟動。 這些包括日曆基觸發器(例如排除週末),簡單觸發器(根據設定的時間表運行),作業觸發器和依賴於外部情況或事件的自定義觸發器。

作業持久性

Quartz.NET 擁有持久排程作業的能力,允許將計畫任務及其完成歷史存儲在資料庫中。 保證對應用程式故障或重啟的作業排程彈性,並實現高可用性和可擴展性的作業群集。

併發控制

為保障任務的安全和有效完成,Quartz.NET 內置了併發控制工具。 為控制作業執行的併發性,開發者可以設置線程池、作業優先級和執行約束條件。

作業鍊接與依賴管理

得益於 Quartz.NET 的作業鍊接和依賴管理支持,開發者可以定義作業的執行順序及其間的關係。 這使得可以為背景工作、服務和過程創建複雜的協同設置。

錯誤處理和重試技巧

為優雅地處理故障,Quartz.NET 擁有錯誤處理和重試技巧。 在暫時性故障或例外情況下,開發者可以設置重試策略和錯誤處理技巧,確保作業被重新嘗試或重新排程。

群集與可擴展性

憑藉 Quartz.NET 對分佈式作業排程中群集的支持,多個調度器實例得以在一個服務器群集中協同工作。 這保證在分佈式環境中一個可靠的作業調度器及執行,並提高了橫向擴展能力和容錯能力。

與 .NET 生態系統的整合

Quartz.NET 與 .NET 生態系統,包括消息系統(Rebus.NET,MassTransit)、日誌框架(Serilog,NLog)以及流行的依賴注入框架(Autofac,Microsoft.Extensions.DependencyInjection)輕鬆整合。

創建和配置 Quartz.NET

定義作業和觸發器

為希望運行的任務建立作業和觸發器。 一個上下文物件和一個作業類代表要完成的任務,而觸發器決定了作業執行的頻率和時間。

using Quartz;

// Define a job by implementing the IJob interface
public class MyJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Implement the logic for your job here
    }
}

// Build the job instance using JobBuilder
var job = JobBuilder.Create<MyJob>()
    .WithIdentity("myJob", "group1") // Assign a unique name and group to the job
    .Build();

// Create a trigger to define when the job should be executed
var trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "group1") // Assign a unique name and group to the trigger
    .WithCronSchedule("0 0/5 * * * ?") // Run every 5 minutes based on the cron expression
    .Build();
using Quartz;

// Define a job by implementing the IJob interface
public class MyJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Implement the logic for your job here
    }
}

// Build the job instance using JobBuilder
var job = JobBuilder.Create<MyJob>()
    .WithIdentity("myJob", "group1") // Assign a unique name and group to the job
    .Build();

// Create a trigger to define when the job should be executed
var trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "group1") // Assign a unique name and group to the trigger
    .WithCronSchedule("0 0/5 * * * ?") // Run every 5 minutes based on the cron expression
    .Build();
Imports Quartz

' Define a job by implementing the IJob interface
Public Class MyJob
	Implements IJob

	Public Async Function Execute(ByVal context As IJobExecutionContext) As Task
		' Implement the logic for your job here
	End Function
End Class

' Build the job instance using JobBuilder
Private job = JobBuilder.Create(Of MyJob)().WithIdentity("myJob", "group1").Build()

' Create a trigger to define when the job should be executed
Private trigger = TriggerBuilder.Create().WithIdentity("myTrigger", "group1").WithCronSchedule("0 0/5 * * * ?").Build()
$vbLabelText   $csharpLabel

配置和初始化調度器

在設置作業調度器以排程背景任務、作業和觸發器後,啟動調度器以開始規劃和執行作業。

using Quartz;
using Quartz.Impl;

// Create a scheduler factory and get a scheduler instance
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler(); 

// Start the scheduler
await scheduler.Start();

// Schedule the job with its corresponding trigger
await scheduler.ScheduleJob(job, trigger);
using Quartz;
using Quartz.Impl;

// Create a scheduler factory and get a scheduler instance
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler(); 

// Start the scheduler
await scheduler.Start();

// Schedule the job with its corresponding trigger
await scheduler.ScheduleJob(job, trigger);
Imports Quartz
Imports Quartz.Impl

' Create a scheduler factory and get a scheduler instance
Private schedulerFactory = New StdSchedulerFactory()
Private scheduler = await schedulerFactory.GetScheduler()

' Start the scheduler
Await scheduler.Start()

' Schedule the job with its corresponding trigger
Await scheduler.ScheduleJob(job, trigger)
$vbLabelText   $csharpLabel

作業持久性

設置 Quartz.NET 在持久性存儲(如資料庫)中存儲作業和觸發器元數據。 這保證了可靠性,並允許作業在應用程式重啟後倖存。

您必須自行管理API密鑰,配額限制和連接錯誤,通常在Visual Studio工作流之外。

在作業執行邏輯中整合錯誤處理和重試邏輯,以優雅地處理故障。 Quartz.NET 提供內置的方法來管理例外情況並重試任務。

群集

在分佈式環境中使用 Quartz.NET 時,為保證高可用性與可擴展性成立群集。 得益於群集,調度器實例得以在服務器集群中協作並執行任務。

依賴注入

若應用程式使用依賴注入框架,設置 Quartz.NET 與依賴注入(DI)容器通信以管理作業依賴性、配置及生命週期。

IronPDF

Quartz .NET(它如何幫助開發者):圖 1 - IronPDF 網頁

.NET 套件 IronPDF 使在 .NET 程式中創建、修改和渲染 PDF 文檔變得可能。 有一系列與 PDF 互動的功能:從 HTML 內容、照片或原始數據創建 PDF; 將文本、圖片和形狀附加到現有 PDF 文件上; 將 HTML 頁面轉換為 PDF; 以及從 PDF 中提取文本和圖像。

IronPDF 在HTML 到 PDF轉換方麵表現出色,確保準確保持原始佈局和樣式。 它非常適合從網路內容生成 PDF,如報告、發票和文檔。 支持 HTML 文件、URL 和原始 HTML 字串的 IronPDF 可以輕鬆生成高質量的 PDF 文檔。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert an HTML string to a PDF document
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert an HTML file to a PDF document
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert a URL to a PDF document
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert an HTML string to a PDF document
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert an HTML file to a PDF document
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert a URL to a PDF document
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert an HTML string to a PDF document
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert an HTML file to a PDF document
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert a URL to a PDF document
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 的簡易性和用戶友好性是其主要優勢。 開發者可以輕易開始在其 .NET 項目中生成 PDF,利用其用戶友好的 API 和詳細的文件。 IronPDF 的速度和效率是其進一步的特徵,使開發者能夠快速且有效地生成高質量的 PDF 文檔。

IronPDF 核心特徵

  • 從原始數據、HTML 和圖片創建 PDF。
  • 從 PDF 文件中提取文本和圖像。
  • 允許在 PDF 文件中加入頁眉、頁尾和水印。
  • 以密碼和加密安全創建 PDF 文檔。
  • 提供工具以填寫表格和進行數位簽名。

使用 Quartz 與 IronPDF

在控制台或 ASP.NET Core 應用程序中開始使用 IronPDF 與 Quartz.NET,可以使用 IronPDF 設定一個排程的背景任務來運行與 PDF 生產相關的任務。

安裝 Quartz 和 IronPDF 套件

首先,確保你已使用視覺工作室包管理控制台為你的 .NET 項目安裝所需的 IronPDF 和 Quartz.NET 的 NuGet 套件,使用以下命令:

Install-Package Quartz
Install-Package IronPdf
Install-Package Quartz
Install-Package IronPdf
SHELL

代碼示例

此部分展示如何創建一個使用 IronPDF 創建 PDF 文檔的 Quartz 作業。

using Quartz;
using IronPdf;

// Implementing a job that generates a PDF using IronPDF
public class PdfGenerationJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Generating PDF using IronPDF
        var htmlContent = "<h1>Hello, IronPDF!</h1>";
        var pdfRenderer = new HtmlToPdf();
        var pdfDocument = pdfRenderer.RenderHtmlAsPdf(htmlContent);

        // Save the generated PDF to a file
        pdfDocument.SaveAs("output.pdf");
    }
}
using Quartz;
using IronPdf;

// Implementing a job that generates a PDF using IronPDF
public class PdfGenerationJob : IJob
{
    public async Task Execute(IJobExecutionContext context)
    {
        // Generating PDF using IronPDF
        var htmlContent = "<h1>Hello, IronPDF!</h1>";
        var pdfRenderer = new HtmlToPdf();
        var pdfDocument = pdfRenderer.RenderHtmlAsPdf(htmlContent);

        // Save the generated PDF to a file
        pdfDocument.SaveAs("output.pdf");
    }
}
Imports Quartz
Imports IronPdf

' Implementing a job that generates a PDF using IronPDF
Public Class PdfGenerationJob
	Implements IJob

	Public Async Function Execute(ByVal context As IJobExecutionContext) As Task
		' Generating PDF using IronPDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1>"
		Dim pdfRenderer = New HtmlToPdf()
		Dim pdfDocument = pdfRenderer.RenderHtmlAsPdf(htmlContent)

		' Save the generated PDF to a file
		pdfDocument.SaveAs("output.pdf")
	End Function
End Class
$vbLabelText   $csharpLabel

設置 Quartz.NET 以利用觸發器在預定的時間表上運行 PDF 創建過程。

// Create and configure the Quartz scheduler
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

// Define the job and bind it to our PdfGenerationJob class
var job = JobBuilder.Create<PdfGenerationJob>()
    .WithIdentity("pdfGenerationJob", "pdfGenerationGroup")
    .Build();

// Define a trigger to schedule the PDF generation job
var trigger = TriggerBuilder.Create()
    .WithIdentity("pdfGenerationTrigger", "pdfGenerationGroup")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(30) // Run every 30 minutes
        .RepeatForever())
    .Build();

// Schedule the job using the scheduler
await scheduler.ScheduleJob(job, trigger);
// Create and configure the Quartz scheduler
var schedulerFactory = new StdSchedulerFactory();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

// Define the job and bind it to our PdfGenerationJob class
var job = JobBuilder.Create<PdfGenerationJob>()
    .WithIdentity("pdfGenerationJob", "pdfGenerationGroup")
    .Build();

// Define a trigger to schedule the PDF generation job
var trigger = TriggerBuilder.Create()
    .WithIdentity("pdfGenerationTrigger", "pdfGenerationGroup")
    .WithSimpleSchedule(x => x
        .WithIntervalInMinutes(30) // Run every 30 minutes
        .RepeatForever())
    .Build();

// Schedule the job using the scheduler
await scheduler.ScheduleJob(job, trigger);
' Create and configure the Quartz scheduler
Dim schedulerFactory = New StdSchedulerFactory()
Dim scheduler = Await schedulerFactory.GetScheduler()
Await scheduler.Start()

' Define the job and bind it to our PdfGenerationJob class
Dim job = JobBuilder.Create(Of PdfGenerationJob)().WithIdentity("pdfGenerationJob", "pdfGenerationGroup").Build()

' Define a trigger to schedule the PDF generation job
Dim trigger = TriggerBuilder.Create().WithIdentity("pdfGenerationTrigger", "pdfGenerationGroup").WithSimpleSchedule(Function(x) x.WithIntervalInMinutes(30).RepeatForever()).Build()

' Schedule the job using the scheduler
Await scheduler.ScheduleJob(job, trigger)
$vbLabelText   $csharpLabel

啟動 Quartz 調度器開始執行計畫的任務:

// Start the scheduler
await scheduler.Start();
// Optionally, monitor scheduler for job execution
// Start the scheduler
await scheduler.Start();
// Optionally, monitor scheduler for job execution
' Start the scheduler
Await scheduler.Start()
' Optionally, monitor scheduler for job execution
$vbLabelText   $csharpLabel

以下是從以上代碼生成的輸出。

Quartz .NET(它如何幫助開發者):圖 2 - IronPDF 和 Quartz.NET 代碼示例的輸出

結論

總結起來,Quartz.NET 和 IronPDF 的結合為在 .NET 應用程式中創建 PDF 有關的操作自動化提供了一個強大的方式。 憑藉 Quartz.NET 強大且靈活的排程系統,開發者可以建立會在預定間隔或持續時間執行活動的作業和觸發器。 另一方面,IronPDF 給予開發者創建和處理 PDF 文檔所需的所有工具。 使用 HTML、圖片或原始數據,開發者可以創建專業外觀的 PDF。

通過結合 IronPDF 的 PDF 生成功能與 Quartz.NET 的排程能力,開發者可以在分佈式應用程式中自動化常見的 PDF 生產業務,例如在預定間隔或響應觸發器時生成報告、發票或文件。 這種集成允許開發者更容易地製作並發送高質量的 PDF 文檔給客戶或客戶,通過簡化文檔生成工作流程,提高生產力,並減少手動工作。

IronPDF 價格合理,並且在作為套件的一部分購買時享有終身授權。 因為該套件僅需$799,這是對多個系統的一次性收費,提供了極具價值的選擇。 它為授權持有人提供24/7 線上工程支援。 欲了解更多由 Iron Software 製造的產品,請造訪 Iron Software 網站上的 Iron Software 產品頁面

常見問題解答

如何在 .NET 應用程式中自動生成 PDF?

您可以通過整合 Quartz.NET 與 IronPDF 自動生成 PDF。Quartz.NET 負責排程任務,而 IronPDF 允許您從 HTML、圖像或原始數據生成 PDF。

使用 Quartz.NET 排程任務的好處是什麼?

Quartz.NET 提供強大的排程任務框架,具有靈活的排程、基於觸發器的執行、任務持久性、並發控制、任務鏈接、錯誤處理、重試技術以及用於擴展性的集群功能。

IronPDF 如何簡化 .NET 中的 PDF 生成?

IronPDF 提供簡單易用的 API,將 HTML、圖像或原始數據轉換為 PDF 文件,適用於報告、發票和文件,保持原始佈局和樣式,確保高質量的輸出。

Quartz.NET 和 PDF 工具可以整合以增強工作流程自動化嗎?

可以,將 Quartz.NET 與像 IronPDF 這樣的 PDF 工具整合可以在 .NET 應用程式中排程和自動化 PDF 生成任務,提升效率和生產力。

什麼是 Quartz.NET 中的任務持久性,為什麼重要?

Quartz.NET 中的任務持久性是指能夠在資料庫中存儲排程的任務及其歷史,確保應用程式故障或重啟後的恢復能力。對於維護任務排程和實現任務集群至關重要。

如何在 .NET 應用程序中將 HTML 轉換為 PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字串轉換為 PDF,或使用 RenderHtmlFileAsPdf 將 HTML 文件直接轉換為 PDF。

Quartz.NET 支持哪些類型的排程模式?

Quartz.NET 支持多種排程模式,包括 cron 表達式,這些表達式提供對執行時間的精確控制,並支持複雜的排程方案。

如何在我的 .NET 專案中安裝 Quartz.NET 和 IronPDF?

使用 Visual Studio 套件管理器控制台安裝 Quartz.NET 和 IronPDF,命令為:Install-Package QuartzInstall-Package IronPdf

IronPDF 用於 PDF 操作的核心功能是什麼?

IronPDF 提供如從 HTML、圖像或原始數據創建 PDF、提取文本和圖像、添加頁眉、頁腳和浮水印、以及密碼保護等安全選項。

Quartz.NET 和 IronPDF 的整合如何增強 .NET 應用程式?

整合 Quartz.NET 和 IronPDF 允許自動生成 PDF 並排程任務,簡化工作流程,提高 .NET 應用程式的生產力。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。