创建用于测试的 Localstack 实例时:我可以创建一个队列,并且通过 AWS CLI 一切似乎都工作正常。我可以看到它存在并发送/接收消息。
但是,当我尝试使用 Javascript v3 Client 时,无论我做什么,我似乎都无法连接它。
在 v3 SDK 中,您在请求中指定队列 URL,如下所示:
const command = new SendMessageCommand({
QueueUrl: 'http://localhost:4566/000000000000/requestQueue',
MessageAttributes: {
Source: {
DataType: 'String',
StringValue: 'Agent X',
},
},
MessageBody: JSON.stringify({ event }),
});
try {
const response = await this.sqsClient.send(command);
但是,它总是会显示类似“错误:InvalidAddress:地址 https://sqs.us-east-1.amazonaws.com/ 对此端点无效”的信息。我已经尝试了很多变体,我真的束手无策。我只是错过了一些明显的东西吗?
我正在使用此示例的变体来引导队列,并且我非常有信心该队列存在并且可以工作。
我玩了几个小时后终于明白了这一点。您需要在 SQS 构造函数中指定端点。如果有人遇到同样的问题:
constructor() {
const url: URL = new URL('http://localhost:4566'); //<-- this is the fixer
const endpoint: EndpointV2 = {
url: url,
};
this.sqsClient = new SQSClient({ region: 'us-east-1', endpoint: endpoint });
}
如果您使用的是 docker:
您需要更新到最新的本地堆栈
更新dockerfile
FROM localstack/localstack:3.3.0
更新
docker-compose.yml
https://docs.localstack.cloud/getting-started/installation/#starting-localstack-with-docker-compose
这是我的本地堆栈服务
localstack:
container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}"
image: localstack/localstack
networks:
backend:
ipv4_address: 172.21.0.12
ports:
- "4566:4566" # LocalStack Gateway
- "4510-4559:4510-4559" # external services port range
environment:
# LocalStack configuration: https://docs.localstack.cloud/references/configuration/
- DEBUG=${DEBUG:-0}
- DISABLE_CORS_CHECKS=1
- S3_ENABLE_CORS=false
- DISABLE_CUSTOM_CORS_S3=1