跳至页脚内容
.NET 帮助

Azure.Messaging.ServiceBus 示例 C#(开发者用法)

在当今互联的数字环境中,有效的沟通是企业成功的基石。 无论是应用程序之间传输关键数据,还是确保分布式系统的实时更新,可靠的消息基础设施都是不可或缺的。

Azure Service Bus 是一种基于云的消息服务,为开发人员创建可扩展、解耦和弹性的应用程序提供了强大的解决方案。 让我们深入了解 Azure Service Bus,理解其重要性并探索其多样化的功能。 本文稍后我们还将探讨 IronPDF 以管理、生成和读取 PDF 文档。

理解 Azure Service Bus

Azure Service Bus 是一个全托管的企业集成消息代理,能够在云端、本地或混合环境中,促进行应用程序和服务之间的可靠通信。

它提供了灵活的消息机制,包括排队和发布/订阅,以便在分布式系统的不同组件之间实现无缝通信。 此外,它还支持批量消息,可以在不超过总大小限制的情况下传输多个消息。

Azure Service Bus 提供以下优势:

  1. 解耦应用程序:Service Bus 允许您将应用程序和服务相互分离。 这种解耦增强了可靠性和可扩展性。
  2. 负载均衡:它在竞争的工作者之间平衡工作,确保高效的资源利用。
  3. 消息传输:数据通过消息在应用程序和服务之间传输。 这些消息的消息体可以包含多种类型的数据,如 JSON、XML 或纯文本。
  4. 消息场景:常见场景包括传输业务数据(如销售订单)、负载均衡,以及使用主题和订阅启用发布者与订阅者之间的关系。
  5. 事务:Service Bus 支持原子事务,允许在单一事务范围内进行多个操作。 一个事务可以有多个并发调用,而批量消息则只有一个调用。
  6. 消息会话:它便于大规模协调工作流和有序的消息传输。

关键功能和能力

  1. 队列和主题: Azure Service Bus 提供队列和主题作为通信渠道。 队列支持点对点通信,确保每条消息仅由一个接收者处理,非常适合工作负载分发和负载均衡场景。 另一方面,主题支持发布/订阅消息模式,允许多个订阅者独立接收相关消息,促进可扩展的事件驱动架构。

  2. 可靠的消息传递:凭借 Azure Service Bus,消息传递固有地具有可靠性。 它确保消息持久性、可以配置消息和错误处理程序、容错能力,以及至少一次的传递语义,最小化数据丢失或重复的风险。 此外,它支持事务,在多个消息上启用原子操作,从而确保数据完整性。

  3. 死信和重试策略:为了有效处理错误消息,Azure Service Bus 提供死信功能,允许问题消息自动转移到单独的队列进行分析和故障排除。 此外,它提供灵活的重试策略,使开发人员能够配置指数反冲策略的自动重试,增强在瞬态故障面前应用程序的弹性。

  4. 分区和扩展:Azure Service Bus 支持消息实体的分区,以在多个节点上分配工作负载,确保水平扩展和高吞吐量。 这种能力对于处理大量消息和适应波动的工作负载而不影响性能或可靠性至关重要。

  5. 与 Azure 生态系统集成:Azure Service Bus 与其他 Azure 服务无缝集成,如 Azure Functions、Logic Apps、Event Grid 和 Azure Kubernetes Service (AKS),使开发人员轻松构建端到端解决方案。 无论是响应传入消息触发无服务器函数,还是利用 Logic Apps 编排复杂的工作流,Azure Service Bus 都是构建强大、事件驱动架构的关键。

IronPDF简介

Azure.Messaging.ServiceBus 示例 C#(工作原理):图1

IronPDF 是一个强大的 C# PDF 库,允许您在 .NET 项目中生成、编辑和提取 PDF 文档的内容。 以下是一些关键功能:

  1. HTML 转 PDF 转换

    • 将 HTML、CSS 和 JavaScript 内容转换为 PDF 格式。

    • 使用 Chrome 渲染引擎生成像素完美的 PDF。

    • 从 URL、HTML 文件或 HTML 字符串生成 PDF。
  2. 图像和内容转换

    • 将图像转换为 PDF,也可从 PDF 中转换出图像。

    • 从现有 PDF 中提取文本和图像。

    • 支持各种图像格式。
  3. 编辑和操作

    • 设置 PDF 的属性、安全性和权限。

    • 添加数字签名。

    • 编辑元数据和修订历史。
  4. 跨平台支持

    • 兼容 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)和 .NET Framework(4.6.2+)。

    • 兼容 Windows、Linux 和 macOS。

    • 可通过 NuGet 易于安装。

使用 IronPDF 和 Azure.Messaging.ServiceBus 生成 PDF 文档

首先,使用 Visual Studio 创建一个控制台应用程序,如下所示。

Azure.Messaging.ServiceBus 示例 C#(工作原理):图2

提供项目名称

Azure.Messaging.ServiceBus 示例 C#(工作原理):图3

提供 .NET 版本

Azure.Messaging.ServiceBus 示例 C#(工作原理):图4

安装 IronPDF 包

Azure.Messaging.ServiceBus 示例 C#(工作原理):图5

创建 Azure Service Bus

使用全 Azure 唯一的名称创建一个命名空间。 命名空间是一个包含应用程序中队列和主题等 Service Bus 资源的容器。

以下是创建命名空间的方法:

  1. 登录 Azure 门户。
  2. 转到“所有服务”页面。
  3. 在左侧导航窗格中,从类别列表中选择“集成”。
  4. 将鼠标悬停在“Service Bus”上,然后单击 Service Bus 磁贴上的“+”按钮。

Azure.Messaging.ServiceBus 示例 C#(工作原理):图6

要在创建命名空间页面上配置基本信息选项卡,请按照以下步骤进行:

  1. 订阅:选择要在其中创建命名空间的 Azure 订阅。
  2. 资源组:选择命名空间要放置的现有资源组,或创建一个新的资源组。

  3. 命名空间名称:输入命名空间的名称。 确保名称符合以下标准:

    • 必须在全 Azure 唯一。

    • 长度必须在 6 到 50 个字符之间。

    • 只能包含字母、数字和连字符"-"。

    • 必须以字母开头并以字母或数字结尾。

    • 不能以 "-sb" 或 "-mgmt" 结尾。
  4. 位置:选择主机命名空间所在的区域。
  5. 定价层:为命名空间选择定价层(基本、标准或高级)。 在此示例中,选择标准。

  6. 在页面底部选择 审核 + 创建

Azure.Messaging.ServiceBus 示例 C#(工作原理):图7

  1. 审核 + 创建 页面上选择创建。

  2. 一旦资源部署成功,转到资源

您将看到您的 Service Bus 命名空间的主页。

在 Azure 门户中创建 Service Bus 队列

要在您的 Service Bus 命名空间中设置队列,请按照以下步骤进行:

  1. 导航到队列:在 Azure 门户中进入 Service Bus 命名空间页面。 从左侧导航菜单中选择“队列”。
  2. 创建新队列:在队列页面上,点击工具栏上的“+ 队列”按钮。
  3. 配置队列:在提供的字段中输入队列名称。 其他设置请保持默认值。 在创建 Azure Service Bus 队列时需要配置的选项:

    1. 名称:这是您的队列的唯一标识符。 选择一个描述性且易于记忆的名称。

    2. 最大队列大小:定义队列的最大存储容量。 您可以将其设置为 1 GB、2 GB、5 GB、10 GB、20 GB、40 GB、80 GB 或 100 GB。 在您的情况下,设置为 1 GB

    3. 最大交付次数:指定消息最多可以被传递的次数,然后再将其发送到死信队列或丢弃。 这有助于处理消息处理失败。

    4. 消息生存时间 (TTL):确定消息在队列中保留多久后失效。 您可以以天、小时、分钟和秒为单位设置。 一旦达到 TTL,如果启用了死信,死信消息将被丢弃或移动到死信队列。

    5. 锁定持续时间:这是接收者处理消息时的锁定时间。 在此期间,其他接收者无法处理同一消息。 您可以以天、小时、分钟和秒为单位设置这个持续时间。

    6. 启用消息过期时死信:启用时,过期(即超出其 TTL)的消息将被移动到死信队列,而不是被丢弃。 这允许进一步检查和处理过期消息。

    7. 启用分区:此选项使队列在多个消息代理间分区,这可以提高可扩展性和吞吐量。 分区对于处理大量的消息非常有用。

这些设置可帮助您控制 Azure Service Bus 队列的行为和性能,确保其符合您的应用程序需求。

Azure.Messaging.ServiceBus 示例 C#(工作原理):图8

  1. 完成创建:点击“创建”按钮以最终确定队列的创建。 这些步骤确保您能够使用 Azure 门户成功创建 Service Bus 命名空间中的队列。

安装 Azure.Messaging.ServiceBus,这是一个 Service Bus 客户端库,使用连接字符串连接到 Azure 队列。

Azure.Messaging.ServiceBus 示例 C#(工作原理):图9

添加下面的代码以使用 Azure.Messaging.ServiceBus 发送和接收消息。

using Azure.Messaging.ServiceBus;
namespace CodeSample
{
    public static class AzureServiceBusDemo
    {
        public static async Task Execute()
        {
            string connectionString = "Endpoint=sb://iron-articles.servicebus.windows.net/;SharedAccessKeyName=all;SharedAccessKey=uqQIzpuc2HxbnAb9keqTINvzfTcFbkkU0+ASbJZ/tow=;EntityPath=ironpdf";
            string queName = "ironpdf";
            Console.WriteLine("Demo IronPDF with Azure.Messaging.ServiceBus");
            Installation.EnableWebSecurity = true;

            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo IronPDF with Azure.Messaging.ServiceBus</h1>";
            content += "<h2>Send Message to Azure.Messaging.ServiceBus Queue: ironpdf</h2>";

            await using var client = new ServiceBusClient(connectionString);
            var msgText = "IronPDF is Awesome Package";
            content += $"<p>Message: {msgText}</p>";

            var tx = client.CreateSender(queName);
            await tx.SendMessageAsync(new ServiceBusMessage(msgText)); // Send message to the queue
            Console.WriteLine($"Sent Below message at: {DateTime.Now}");
            content += $"<p>Sent Below message at: {DateTime.Now}</p>";

            Console.ReadLine(); // wait for user input to read the message;

            var rx = client.CreateReceiver(queName);
            var msg = await rx.ReceiveMessageAsync(); // receive messages
            content += "<h2>Receive Message from Azure.Messaging.ServiceBus Queue: ironpdf</h2>";
            content += $"<p>Recieved Below message at: {DateTime.Now}</p>";
            Console.WriteLine($"Recieved Below message at: {DateTime.Now}");

            content += $"<p>MessageID={msg.MessageId}</p>";
            Console.WriteLine($"MessageID={msg.MessageId}");

            content += $"<p>Message Received: {msg.Body}</p>";
            Console.WriteLine($"Message Received: {msg.Body}");

            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeAzureServiceBusQueueAndIronPdf.pdf");
        }
    }
}
using Azure.Messaging.ServiceBus;
namespace CodeSample
{
    public static class AzureServiceBusDemo
    {
        public static async Task Execute()
        {
            string connectionString = "Endpoint=sb://iron-articles.servicebus.windows.net/;SharedAccessKeyName=all;SharedAccessKey=uqQIzpuc2HxbnAb9keqTINvzfTcFbkkU0+ASbJZ/tow=;EntityPath=ironpdf";
            string queName = "ironpdf";
            Console.WriteLine("Demo IronPDF with Azure.Messaging.ServiceBus");
            Installation.EnableWebSecurity = true;

            // Instantiate Renderer
            var renderer = new ChromePdfRenderer();
            var content = "<h1>Demo IronPDF with Azure.Messaging.ServiceBus</h1>";
            content += "<h2>Send Message to Azure.Messaging.ServiceBus Queue: ironpdf</h2>";

            await using var client = new ServiceBusClient(connectionString);
            var msgText = "IronPDF is Awesome Package";
            content += $"<p>Message: {msgText}</p>";

            var tx = client.CreateSender(queName);
            await tx.SendMessageAsync(new ServiceBusMessage(msgText)); // Send message to the queue
            Console.WriteLine($"Sent Below message at: {DateTime.Now}");
            content += $"<p>Sent Below message at: {DateTime.Now}</p>";

            Console.ReadLine(); // wait for user input to read the message;

            var rx = client.CreateReceiver(queName);
            var msg = await rx.ReceiveMessageAsync(); // receive messages
            content += "<h2>Receive Message from Azure.Messaging.ServiceBus Queue: ironpdf</h2>";
            content += $"<p>Recieved Below message at: {DateTime.Now}</p>";
            Console.WriteLine($"Recieved Below message at: {DateTime.Now}");

            content += $"<p>MessageID={msg.MessageId}</p>";
            Console.WriteLine($"MessageID={msg.MessageId}");

            content += $"<p>Message Received: {msg.Body}</p>";
            Console.WriteLine($"Message Received: {msg.Body}");

            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeAzureServiceBusQueueAndIronPdf.pdf");
        }
    }
}
Imports Azure.Messaging.ServiceBus
Namespace CodeSample
	Public Module AzureServiceBusDemo
		Public Async Function Execute() As Task
			Dim connectionString As String = "Endpoint=sb://iron-articles.servicebus.windows.net/;SharedAccessKeyName=all;SharedAccessKey=uqQIzpuc2HxbnAb9keqTINvzfTcFbkkU0+ASbJZ/tow=;EntityPath=ironpdf"
			Dim queName As String = "ironpdf"
			Console.WriteLine("Demo IronPDF with Azure.Messaging.ServiceBus")
			Installation.EnableWebSecurity = True

			' Instantiate Renderer
			Dim renderer = New ChromePdfRenderer()
			Dim content = "<h1>Demo IronPDF with Azure.Messaging.ServiceBus</h1>"
			content &= "<h2>Send Message to Azure.Messaging.ServiceBus Queue: ironpdf</h2>"

			Await var client = New ServiceBusClient(connectionString)
			Dim msgText = "IronPDF is Awesome Package"
			content &= $"<p>Message: {msgText}</p>"

			Dim tx = client.CreateSender(queName)
			Await tx.SendMessageAsync(New ServiceBusMessage(msgText)) ' Send message to the queue
			Console.WriteLine($"Sent Below message at: {DateTime.Now}")
			content &= $"<p>Sent Below message at: {DateTime.Now}</p>"

			Console.ReadLine() ' wait for user input to read the message;

			Dim rx = client.CreateReceiver(queName)
			Dim msg = Await rx.ReceiveMessageAsync() ' receive messages
			content &= "<h2>Receive Message from Azure.Messaging.ServiceBus Queue: ironpdf</h2>"
			content &= $"<p>Recieved Below message at: {DateTime.Now}</p>"
			Console.WriteLine($"Recieved Below message at: {DateTime.Now}")

			content &= $"<p>MessageID={msg.MessageId}</p>"
			Console.WriteLine($"MessageID={msg.MessageId}")

			content &= $"<p>Message Received: {msg.Body}</p>"
			Console.WriteLine($"Message Received: {msg.Body}")

			Dim pdf = renderer.RenderHtmlAsPdf(content)
			' Export to a file or Stream
			pdf.SaveAs("AwesomeAzureServiceBusQueueAndIronPdf.pdf")
		End Function
	End Module
End Namespace
$vbLabelText   $csharpLabel

代码解释

  1. 连接字符串和队列名称

    • connectionString 变量包含用于 Azure Service Bus 命名空间的连接详细信息。 它指定了终端、共享访问密钥和实体路径(队列名称)。

    • queName 变量保存您要处理的 Service Bus 队列的名称。
  2. 演示设置

    • 代码首先打印一条信息:“演示 IronPDF 与 Azure.Messaging.ServiceBus”。

    • 使用 Installation.EnableWebSecurity = true; 启用网络安全。
  3. 创建一个 Service Bus 客户端

    • 使用提供的连接字符串创建 ServiceBusClient

    • 此客户端允许您与 Service Bus 实体(队列、主题等)交互。
  4. 发送消息

    • 使用 CreateSender 方法将内容为 “IronPDF 是超棒的包”的消息发送到指定队列。

    • 使用 new ServiceBusMessage(msgText) 创建该消息。

    • 发送消息的时间戳打印到控制台。
  5. 接收消息

    • 使用 CreateReceiver 为同一队列创建接收器。

    • 代码等待用户输入(使用 Console.ReadLine()),以模拟消息处理。

    • 当消息被接收时,其ID和主体打印到控制台。
  6. 生成 PDF

    • 渲染器从 HTML 内容(包括发送和接收的消息)创建 PDF。

    • 生成的 PDF 被保存为 “AwesomeAzureServiceBusQueueAndIronPdf.pdf”。

输出

Azure.Messaging.ServiceBus 示例 C#(工作原理):图10

PDF

Azure.Messaging.ServiceBus 示例 C#(工作原理):图11

IronPDF 许可

运行并生成 PDF 需要 IronPDF 包的许可证。 在访问包之前,在应用程序开始时添加下面的代码。

IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

试用许可证可在 IronPDF 试用许可证页面 上获得。

结论

在一个以数字化转型和技术快速进步为特征的时代,Azure Service Bus 在企业的现代化进程中成为了一个关键组件。通过提供可靠、可扩展和灵活的消息能力,它赋能开发人员设计出能够适应不断变化业务需求的弹性和灵活的解决方案。

无论是促进无缝集成、启用事件驱动架构,还是确保异步通信,Azure Service Bus 在推动创新和加速跨行业数字化举措中发挥着变革作用。

随着组织继续拥抱原生云范式和分布式架构,Azure Service Bus 代表了微软在助力开发人员和企业云化进程中的承诺。 IronPDF 简化了 .NET 应用程序中的 PDF 生成,提供了灵活性和功能,可以直接从代码生成专业级文档。

常见问题解答

如何在C#中将HTML转换为PDF?

您可以使用 IronPDF 的 RenderHtmlAsPdf 方法将 HTML 字符串转换为 PDF。此外,您还可以使用 RenderHtmlFileAsPdf 方法将 HTML 文件转换为 PDF。

什么是 Azure 服务总线,它如何增强通信?

Azure 服务总线是一个完全托管的企业集成消息代理,通过促进应用程序和服务之间的可靠消息传输来增强通信,无论它们是基于云的、本地的还是混合环境中的。

文章中使用的 PDF 库的主要功能是什么?

IronPDF 库提供功能,如 HTML 转 PDF 转换、编辑和操作 PDF、图像转换以及与各种 .NET 框架和操作系统的跨平台兼容性。

如何使用 C# 中的 Azure.Messaging.ServiceBus 发送消息?

要使用 Azure.Messaging.ServiceBus 发送消息,您需要创建一个 ServiceBusSender 并使用 SendMessageAsync 方法向队列发送消息。

Azure 服务总线中的死信处理如何工作?

Azure 服务总线中的死信处理会自动将无法处理的消息移动到单独的死信队列中,允许开发人员有效地分析和解决这些有问题的消息。

Azure 服务总线能支持事件驱动架构吗?

是的,Azure 服务总线与其他 Azure 服务(如 Azure Functions 和 Logic Apps)无缝集成,支持事件驱动架构,并提供可扩展且灵活的消息解决方案。

使用 Azure.Messaging.ServiceBus 接收消息的过程是什么?

要使用 Azure.Messaging.ServiceBus 接收消息,您需要创建一个 ServiceBusReceiver 并使用 ReceiveMessageAsync 方法处理从队列中接收的消息。

在文章中提到的 PDF 库需要许可证吗?

是的,生成 PDF 需要 IronPDF 许可证。您可以为您的应用程序获取许可证密钥,或使用 IronPDF 试用许可证页面提供的试用许可证。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。