跳至页脚内容
.NET 帮助

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

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

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

理解 Azure Service Bus

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

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

Azure Service Bus 提供以下优势:

1.解耦应用程序:服务总线允许您将应用程序和服务彼此分离。 这种解耦增强了可靠性和可扩展性。 2.负载均衡:它在相互竞争的工人之间平衡工作,确保高效的资源利用。 3.消息传输:数据通过消息在应用程序和服务之间传输。 这些消息的消息体可以包含多种类型的数据,如 JSON、XML 或纯文本。 4.消息传递场景:常见场景包括传输业务数据(例如销售订单)、负载均衡以及使用主题和订阅建立发布者和订阅者之间的关系。 5.事务:服务总线支持原子事务,允许在单个事务范围内执行多个操作。 一个事务可以有多个并发调用,而批量消息则只有一个调用。 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.定价层级:选择命名空间的定价层级(基本、标准或高级)。 在此示例中,选择标准。

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

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

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

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

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

在 Azure 门户中创建 Service Bus 队列

要在您的 Service Bus 命名空间中设置队列,请按照以下步骤进行: 1.导航到队列:转到 Azure 门户中的服务总线命名空间页面。 从左侧导航菜单中选择"队列"。 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

4.完成创建:点击"创建"按钮完成队列的创建。 这些步骤确保您能够使用 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");
        }
    }
}
$vbLabelText   $csharpLabel

代码解释

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

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

* `queName` 变量保存您要处理的 Service Bus 队列的名称。

2.演示设置:

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

* 使用 `Installation.EnableWebSecurity = true;` 启用网络安全。

3.创建服务总线客户端:

* 使用提供的连接字符串创建 `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";
$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 试用许可证页面提供的试用许可证。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,是 C# PDF 技术的先锋工程师。作为 Iron Software 核心代码库的原始开发者,自公司成立以来,他就塑造了公司的产品架构,并与首席执行官 Cameron Rimington 一起将其转变成一家公司,拥有50多人,服务于 NASA、特斯拉和全球政府机构。

Jacob 拥有曼彻斯特大学 (1998-2001) 的一级荣誉土木工程学士学位。1999 年在伦敦创办了自己的第一家软件公司,并于 2005 年创建了他的第一个 .NET 组件后,他专注于解决微软生态系统中的复杂问题。

他的旗舰 IronPDF 和 Iron Suite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。