将消息队列从 Microsoft Azure 服务总线迁移到 Amazon SQS - AWS Prescriptive Guidance

将消息队列从 Microsoft Azure 服务总线迁移到 Amazon SQS

Nisha Gambhir,Amazon Web Services

摘要

此模式介绍如何使用 Microsoft Azure 服务总线队列消息传送平台将 .NET Framework 或 .NET Core Web 或控制台应用程序迁移到 Amazon Simple Queue Service(Amazon SQS)。

应用程序使用消息传递服务向其他应用程序发送数据以及从其他应用程序接收数据。这些服务有助于在云中构建解耦、高度可扩展的微服务、分布式系统和无服务器应用程序。

Azure 服务总线队列是更广泛的 Azure 消息传送基础结构的一部分,该基础结构支持排队和发布/订阅消息收发。 

Amazon SQS 是一种完全托管的消息队列服务,使您能够分离和扩展微服务、分布式系统和无服务器应用程序。Amazon SQS 消除了与管理和操作面向消息的中间件相关的复杂性和开销,使开发人员能够专注于差异化工作。使用 Amazon SQS,您可以在软件组件之间以任意卷发送、存储和接收消息,而不会丢失消息或要求其他服务可用。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account 

  • 使用 Azure 服务总线队列的 .NET Framework 或 .NET Core Web 或控制台应用程序(附加示例代码)

产品版本

  • .NET Framework 3.5 或更高版本,或 .NET Core 1.0.1、2.0.0 或更高版本

架构

源技术堆栈

  • 使用 Azure 服务总线队列发送消息的 .NET(Core 或 Framework)Web 或控制台应用程序

目标技术堆栈

  • Amazon SQS

工具

工具

  • Microsoft Visual Studio

代码

要为 Amazon SQS 创建 AWS Identity and Access Management (IAM) policy,请执行以下操作:

1. 登录 AWS 管理控制台,并通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

2. 在左侧的导航窗格中,选择 Policies (策略),然后选择 Create policy (创建策略)

3. 选择 JSON 选项卡,然后粘贴以下代码:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:GetQueueUrl", "sqs:ChangeMessageVisibility", "sqs:SendMessageBatch", "sqs:ReceiveMessage", "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:ListQueueTags", "sqs:ListDeadLetterSourceQueues", "sqs:DeleteMessageBatch", "sqs:PurgeQueue", "sqs:DeleteQueue", "sqs:CreateQueue", "sqs:ChangeMessageVisibilityBatch", "sqs:SetQueueAttributes" ], "Resource": "arn:aws:sqs:*:<AccountId>:*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "sqs:ListQueues", "Resource": "*" } ] }

4. 选择查看策略,键入名称,然后选择创建策略

5. 将新创建的策略附加到现有 IAM 角色或创建新角色。

操作说明

任务描述所需技能
为 Amazon SQS 创建 IAM policy。

创建将提供对 Amazon SQS 的访问权限的 IAM policy。有关示例策略,请参阅“代码”部分。

系统工程师
创建 AWS 配置文件。

通过运行 AWS Tools for PowerShell 命令 Set-AWSCredential 创建新的配置文件。此命令将您的访问密钥和秘密密钥存储在您指定的配置文件名称下的默认凭证文件中。将您之前创建的 Amazon SQS 策略与此账户链接。保存 AWS 访问密钥 ID 和秘密访问密钥。在接下来的步骤中将需要这些内容。

系统工程师
创建 SQS 队列。

您可以创建标准队列或先进先出 (FIFO) 队列。有关说明,请参阅“参考”部分中的链接。

系统工程师
任务描述所需技能
安装 AWS Toolkit for Visual Studio。

此工具包是 Microsoft Visual Studio 的扩展,可让您更轻松地在 AWS 中构建和部署 .NET 应用程序。有关安装和使用说明,请参阅“参考”部分中的链接。

应用程序开发人员
安装 AWSSDK.SQS NuGet 包。

您可以安装 AWSSDK。SQS:在 Visual Studio 中选择“管理 NuGet 包”或运行命令“Install-Package AWSSDK.SQS”。

应用程序开发人员
在 .NET 应用程序中创建一个 AWSCredentials 对象。

附件中的示例应用程序演示如何创建继承自 AWSCredentials 的 BasicAWSCredentials 对象。您可以使用之前的访问密钥 ID 和秘密访问密钥,也可以让对象在运行时从 .aws 文件夹中选取它们作为用户配置文件的一部分。

应用程序开发人员
创建 SQS 客户端对象。

创建适用于 .NET Framework 的 SQS 客户端对象 (AmazonSQSClient)。这是 Amazon.SQS 命名空间的一部分。此对象是必需的,而不是 IQueueClient,后者是 Microsoft.Azure.ServiceBus 命名空间的一部分。

应用程序开发人员
调用 SendMessageAsync 方法以将消息发送到 SQS 队列。

更改将消息发送到队列的代码以使用 amazonSqsClient.SendMessageAsync 方法。有关详细信息,请参阅随附的代码示例。

应用程序开发人员
调用 ReceiveMessageAsync 方法以从 SQS 队列接收消息。

更改接收消息的代码以使用 amazonSqsClient.ReceiveMessageAsync 方法。有关详细信息,请参阅随附的代码示例。

应用程序开发人员
调用 DeleteMessageAsync 方法以从 SQS 队列中删除消息。

要删除消息,请将代码从 queueClient.CompleteAsync 方法更改为 amazonSqsClient.DeleteMessageAsync 方法。有关详细信息,请参阅随附的代码示例。

应用程序开发人员

其他信息

此模式包括两个示例应用程序(请参阅附件部分):

  • AzureSbTestApp 包含使用 Azure 服务总线队列的代码。

  • AmazonSqsTestApp 使用 Amazon SQS。这是一个使用 .NET Core 2.2 的控制台应用程序,包括用于发送和接收消息的示例。

注意:

  • queueClient 是 IQueueClient 的一个对象,它是 Microsoft.Azure.ServiceBus 命名空间(包含在 Microsoft.Azure.ServiceBus NuGet 包中)的一部分。

  • amazonSqsClient 是 AmazonSQSClient 的一个对象,它是 Amazon.SQS 命名空间(包含在 AWSSDK.SQS NuGet 包)。

  • 根据代码的运行位置(例如,如果代码在 EC2 上运行),角色需要具有写入 SQS 队列的权限。

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip