65.9K
CodeProject 正在变化。 阅读更多。
Home

AWS LocalStack - 在 Windows 上本地安装和配置 SQS

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2024 年 4 月 5 日

CPOL

5分钟阅读

viewsIcon

6451

本文将介绍如何在 Windows 机器上安装和配置 AWS LocalStack 以用于 SQS(简单队列服务)。

目录

什么是 AWS LocalStack

LocalStack 是一个流行的开源项目,它提供了一个功能齐全的本地 AWS 云堆栈,用于测试和开发目的。它允许开发人员在本地机器上模拟 AWS 云环境,从而使他们能够在不产生与真实 AWS 服务相关的任何成本的情况下开发和测试 AWS 应用程序。

LocalStack 的主要特点包括:

  1. 模拟 AWS 服务:LocalStack 提供各种 AWS 服务的模拟,包括 S3(简单存储服务)、SQS(简单队列服务)、SNS(简单通知服务)、DynamoDB(NoSQL 数据库)、Lambda(无服务器计算)等。
  2. 易于设置和配置:LocalStack 易于设置和配置,通常只需一个命令即可启动本地 AWS 环境。
  3. 测试和开发:它使开发人员能够针对 AWS 服务在本地测试他们的应用程序,从而实现快速开发和调试周期,而无需部署到真实的 AWS 云。
  4. 离线开发:开发人员可以使用 LocalStack 在本地模拟 AWS 云,从而可以在离线或没有互联网连接的环境中进行工作。
  5. 自定义和可扩展性:LocalStack 支持自定义和可扩展性,使开发人员能够添加或修改功能,以更好地满足其测试和开发需求。
  6. 与 AWS SDK 集成:LocalStack 与 AWS SDK 和命令行工具无缝集成,使开发人员能够使用熟悉的工具和 API 与本地 AWS 环境进行交互。

总而言之,LocalStack 是 AWS 开发人员和团队用于简化开发工作流程、提高生产力以及降低与 AWS 开发和测试相关的成本的工具。

必备组件

启动 Docker Desktop

使用 Docker 下载和运行 LocalStack

您将使用 Docker 在本地运行并连接到 LocalStack,Docker 中有一个 LocalStack 镜像。在命令提示符中运行以下 docker CLI 命令:

docker run --rm -it -p 4566:4566 -p 4510-4559:4510-4559 localstack/localstack

首次运行 docker 命令时,可能需要几分钟时间下载,但之后每次启动都将在几秒钟内完成。

为本地环境配置

运行以下 CLI 命令来编辑您的配置文件:

aws configure
  1. 在 **访问密钥 ID** 和 **秘密访问密钥** 处输入 test
  2. 在区域处输入 us-east-1
  3. 在格式处输入 json

编辑位于 C:\Users\USERNAME\.aws\config 的配置文件,内容如下:

  1. endpoint_url = https://:4566

创建队列

AWS LocalStack 包含两种不同类型的队列:FIFO(先进先出)队列和标准队列。FIFO 和标准队列在 LocalStack 中的区别概述:

  1. 消息排序:
    • FIFO 队列确保消息按发送顺序传递。即使在分布式系统或高吞吐量的情况下,这种排序也会得到维护。
    • 标准队列不保证严格的消息排序。消息可能会乱序传递,并且跨多次消息发送的排序不会被保留。
  2. 去重:
    • FIFO 队列支持一次性处理和消息去重。每条消息都必须有一个唯一的消息去重 ID。
    • 标准队列不提供内置的去重机制。如果需要,您可能需要在应用程序中实现去重逻辑。
  3. 吞吐量:
    • FIFO 队列的最大吞吐量为每秒 300 个事务(API 调用)/操作(发送消息、接收消息、删除消息等)。
    • 标准队列支持比 FIFO 队列更高的吞吐量,但具体限制可能因消息大小、消息保留期和其他属性等因素而异。
  4. 属性支持:
    • FIFO 队列支持消息组 ID 和消息去重 ID 等附加属性,这些属性用于消息排序和去重。
    • 标准队列的属性比 FIFO 队列少。
  5. 延迟队列:
    • FIFO 队列支持消息延迟队列,允许您延迟消息的传递一段时间。
    • 标准队列也支持消息延迟队列。
  6. 支持的操作:
    • FIFO 队列支持真实 AWS 环境中的所有可用操作,包括发送、接收、删除消息、更改消息可见性等。
    • 标准队列支持与 FIFO 队列类似的操作,但在行为和限制方面可能存在差异。

首先,我们可以创建标准队列,如果需要消息按特定顺序传递,则可以删除标准队列并创建 FIFO 队列(它们只有一个额外的开关)。

运行以下 AWS CLI 命令:

aws --endpoint-url=https://:4566 sqs create-queue --queue-name xhibit_DocAndEvents --region us-east-1
aws --endpoint-url=https://:4566 sqs create-queue --queue-name xhibit_BusinessLayer --region us-east-1
aws --endpoint-url=https://:4566 sqs create-queue --queue-name xhibit_DocProcessor --region us-east-1
aws --endpoint-url=https://:4566 sqs create-queue --queue-name xhibit_Notifications --region us-east-1

注意:要创建 **FIFO 队列**

aws --endpoint-url=https://:4566 sqs create-queue --queue-name xhibit_DocAndEvents --region us-east-1 --attributes fifoqueue=true

列出队列

要查看队列,请运行以下 CLI 命令:

aws --endpoint-url=http://sqs.us-east-1.localhost.localstack.cloud:4566 sqs list-queues

使用命令提示符发布消息

要测试您的 (xhibit_DocAndEvents) 队列是否正在运行,您可以使用 CLI 发送一条消息:

aws --endpoint-url=http://sqs.us-east-1.localhost.localstack.cloud:4566 sqs send-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/xhibit_DocAndEvents --message-body "hello world…."

注意:请注意消息体内容周围的双引号。

使用命令提示符订阅队列并消费消息

要测试您可以从您的 (xhibit_DocAndEvents) 队列中消费消息,请运行以下 CLI 命令:

aws --endpoint-url=http://sqs.us-east-1.localhost.localstack.cloud:4566 sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/xhibit_DocAndEvents

下面的发布和订阅窗口

读取最后 10 条消息

aws --endpoint-url=http://sqs.us-east-1.localhost.localstack.cloud:4566 sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/xhibit_DocAndEvents --max-number-of-messages 10

从队列中删除消息

订阅消息不会自动从队列中移除消息。您或您的应用程序必须删除该消息。阅读消息后,使用 ReceiptHandle 属性来标识特定消息。

在删除消息 CLI 命令中使用该句柄:

aws sqs delete-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/xhibit_DocAndEvents --receipt-handle YWEwODNkNTgtOTk1OS00M2E3LWE1ZjctZGZmOWRiY2E2MjRjIGFybjphd3M6c3FzOnVzLWVhc3QtMTowMDAwMDAwMDAwMDA6eGhpYml0X0RvY0FuZEV2ZW50cyA4MDdiODlkNi1mNDgxLTQ2ZDItOGJmZi1hZmRkY2MyZWJkZjcgMTcxMDk0NzE0Ni42NTkwMTEx

消息已移除

删除队列

要删除队列,请运行以下 CLI 命令:

aws --endpoint-url=https://:4566 sqs delete-queue --queue-url https://:4566/000000000000/xhibit_BusinessLayer

下面,我列出了队列,删除一个队列,然后重新列出队列:

© . All rights reserved.