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





5.00/5 (5投票s)
本文将介绍如何在 Windows 机器上安装和配置 AWS LocalStack 以用于 SQS(简单队列服务)。
目录
- 什么是 AWS LocalStack
- 必备组件
- 启动 Docker Desktop
- 使用 Docker 下载和运行 LocalStack
- 为本地环境配置
- 创建队列
- 列出队列
- 使用命令提示符发布消息
- 使用命令提示符订阅队列并消费消息
- 删除队列
什么是 AWS LocalStack
LocalStack 是一个流行的开源项目,它提供了一个功能齐全的本地 AWS 云堆栈,用于测试和开发目的。它允许开发人员在本地机器上模拟 AWS 云环境,从而使他们能够在不产生与真实 AWS 服务相关的任何成本的情况下开发和测试 AWS 应用程序。
LocalStack 的主要特点包括:
- 模拟 AWS 服务:LocalStack 提供各种 AWS 服务的模拟,包括 S3(简单存储服务)、SQS(简单队列服务)、SNS(简单通知服务)、DynamoDB(NoSQL 数据库)、Lambda(无服务器计算)等。
- 易于设置和配置:LocalStack 易于设置和配置,通常只需一个命令即可启动本地 AWS 环境。
- 测试和开发:它使开发人员能够针对 AWS 服务在本地测试他们的应用程序,从而实现快速开发和调试周期,而无需部署到真实的 AWS 云。
- 离线开发:开发人员可以使用 LocalStack 在本地模拟 AWS 云,从而可以在离线或没有互联网连接的环境中进行工作。
- 自定义和可扩展性:LocalStack 支持自定义和可扩展性,使开发人员能够添加或修改功能,以更好地满足其测试和开发需求。
- 与 AWS SDK 集成:LocalStack 与 AWS SDK 和命令行工具无缝集成,使开发人员能够使用熟悉的工具和 API 与本地 AWS 环境进行交互。
总而言之,LocalStack 是 AWS 开发人员和团队用于简化开发工作流程、提高生产力以及降低与 AWS 开发和测试相关的成本的工具。
必备组件
- 请确保在本地安装了 Docker Desktop(适用于您的环境)。
- 下载并运行 AWS CLI 安装程序(适用于您的环境)。
启动 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
- 在 **访问密钥 ID** 和 **秘密访问密钥** 处输入
test
。 - 在区域处输入
us-east-1
。 - 在格式处输入
json
。
编辑位于 C:\Users\USERNAME\.aws\config 的配置文件,内容如下:
endpoint_url = https://:4566
创建队列
AWS LocalStack 包含两种不同类型的队列:FIFO(先进先出)队列和标准队列。FIFO 和标准队列在 LocalStack 中的区别概述:
- 消息排序:
- FIFO 队列确保消息按发送顺序传递。即使在分布式系统或高吞吐量的情况下,这种排序也会得到维护。
- 标准队列不保证严格的消息排序。消息可能会乱序传递,并且跨多次消息发送的排序不会被保留。
- 去重:
- FIFO 队列支持一次性处理和消息去重。每条消息都必须有一个唯一的消息去重 ID。
- 标准队列不提供内置的去重机制。如果需要,您可能需要在应用程序中实现去重逻辑。
- 吞吐量:
- FIFO 队列的最大吞吐量为每秒 300 个事务(API 调用)/操作(发送消息、接收消息、删除消息等)。
- 标准队列支持比 FIFO 队列更高的吞吐量,但具体限制可能因消息大小、消息保留期和其他属性等因素而异。
- 属性支持:
- FIFO 队列支持消息组 ID 和消息去重 ID 等附加属性,这些属性用于消息排序和去重。
- 标准队列的属性比 FIFO 队列少。
- 延迟队列:
- FIFO 队列支持消息延迟队列,允许您延迟消息的传递一段时间。
- 标准队列也支持消息延迟队列。
- 支持的操作:
- 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
下面,我列出了队列,删除一个队列,然后重新列出队列: