gpt4 book ai didi

integration-testing - 应用程序无法连接到 localstack SQS

转载 作者:行者123 更新时间:2023-12-05 07:31:29 26 4
gpt4 key购买 nike

作为测试开发人员,我正在尝试使用 localstack 来模拟 SQS 以进行集成测试。

Docker 撰写:

  localstack:
image: localstack/localstack:0.8.7
ports:
- "4567-4583:4567-4583"
- "9898:${PORT_WEB_UI-8080}"
environment:
- SERVICES=sqs
- DOCKER_HOST=unix:///var/run/docker.sock
- HOSTNAME=localstack
- HOSTNAME_EXTERNAL=192.168.99.101
- DEFAULT_REGION=us-east-1
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"

启动 localstack SQS 后:能够连接和创建队列,并能够通过 AWS CLI 检索它。 Localstack Dashboard 还显示创建的队列。

$ aws --endpoint-url=http://192.168.99.101:4576 --region=us-west-1 sqs create-queue --queue-name myqueue
{
"QueueUrl": "http://192.168.99.101:4576/queue/myqueue"
}

应用程序正在使用 com.amazon.sqs.javamessaging.SQSConnectionFactory 连接到 SQS。它还将 com.amazonaws.auth.DefaultAWSCredentialsProviderChain 用于 AWS 凭证

1) 如果我在启动应用程序时给出“-e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=foobar -e AWS_SECRET_ACCESS_KEY=foobar”,我得到HTTPStatusCode:403 AmazonErrorCode:InvalidClientTokenIdcom.amazonaws.services.sqs.model.AmazonSQSException:请求中包含的安全 token 无效

2) 如果我提供 AWS SQS 的 ACCESS_KEY 和 SECRET_KEY,我得到HTTPStatusCode:400 AmazonErrorCode:AWS.SimpleQueueService.NonExistentQueuecom.amazonaws.services.sqs.model.QueueDoesNotExistException:此 wsdl 版本不存在指定的队列。

下面是应用程序代码。前 2 条日志消息正在打印它获得的连接和 session 。错误来自“Queue publisherQueue = sqsSession.createQueue(sqsName);”

sqsConnection = (Connection) context.getBean("outputSQSConnection");
LOGGER.info("SQS connection Obtained " + sqsConnection);

sqsSession = sqsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
LOGGER.info("SQS Session Created " + sqsSession);

Queue publisherQueue = sqsSession.createQueue(sqsName);

http://localstack:4576/queue/myqueue”“http://192.168.99.101:4576/queue/myqueue”我都试过了。结果是一样的。你能帮我解决这个问题吗?

最佳答案

几周前我遇到了类似的问题。查看您的配置,我认为您应该能够使用 localhost。在我的例子中,我们有调用 localstack 的服务也在 docker 中运行,我们最终创建了一个 docker 网络来在容器之间进行通信。通过查看 Localstack 测试,我能够找出解决方案。这里需要注意的重要一点是您需要正确设置 Endpoint 配置。

     private AmazonSQSClient getLocalStackConfiguredClient() {
AmazonSQSClientBuilder clientBuilder = AmazonSQSClientBuilder.standard();


clientBuilder.withEndpointConfiguration(getEndpointConfiguration(configuration.getLocalStackConfiguration()
.getSqsEndpoint(), awsRegion));
return (AmazonSQSClient)clientBuilder.build();
}

private AwsClientBuilder.EndpointConfiguration getEndpointConfiguration(String endpoint, Regions awsRegion) {
return new AwsClientBuilder.EndpointConfiguration(endpoint, awsRegion.getName());
}

希望这可以帮助您解决问题。

关于integration-testing - 应用程序无法连接到 localstack SQS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51769673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com