我已经确认问题出在 localstack 最新映像上,因为我按照克里斯的建议尝试了旧映像,并且效果很好。
With localstack/localstack:0.11.2
效果很好
docker run -it -e SERVICES=sns,sqs -e TEST_AWS_ACCOUNT_ID="000000000000" -e DEFAULT_REGION="us-east-1" -e LOCALSTACK_HOSTNAME="localhost" -e -rm --privileged --name localstack_main -p 4566:4566 -p 4571:4571 -p 8080-8081:8080-8081 -v "/tmp/localstack:/tmp/localstack" -v "/var/run/docker.sock:/var/run/docker.sock" -e DOCKER_HOST="unix:///var/run/docker.sock" -e HOST_TMP_FOLDER="/tmp/localstack" "localstack/localstack:0.11.2"
With latest
(我认为这是bdfbe53666a4dd13a09dd9e4b155e2fb750b8041daf7efc69783cb4208b6cacc
但不是100%确定)它不起作用。
以下图像版本也不起作用:
localstack/localstack:0.12.8
localstack/localstack:0.11.6
UPDATE 1:我创建了一个简单的存储库,其中包含重现问题的说明https://gitlab.com/sunnyatticsoftware/sandbox/issue-localstack-masstransit https://gitlab.com/sunnyatticsoftware/sandbox/issue-localstack-masstransit
请注意,该存储库对 MassTransit 有一个包装抽象,可以与干净的架构一起使用。这不会影响问题,但复制粘贴所需的部分比从头开始构建示例更容易。
UPDATE 2: 已确认是最新版本localstack/localstack:0.12.9.1
适用于上述场景(请参阅存储库)
更新3 (2021-01-12): 我尝试过这个版本localstack/localstack:0.12.9.1
再次,它不起作用。不确定上次是否真的有效或者 docker 镜像被覆盖。无论如何,我又回到了使用该版本localstack/localstack:0.11.2
再次,因为latest
不幸的是,它也坏了。
我可以看到队列中的消息处于隐藏状态。
awslocal sqs get-queue-attributes --queue-url http://localhost:4566/000000000000/sample-queue --attribute-names All
{
"Attributes": {
"ApproximateNumberOfMessages": "0",
"ApproximateNumberOfMessagesDelayed": "0",
"ApproximateNumberOfMessagesNotVisible": "4",
"CreatedTimestamp": "1626087449.988218",
"DelaySeconds": "0",
"LastModifiedTimestamp": "1626087450.113652",
"MaximumMessageSize": "262144",
"MessageRetentionPeriod": "345600",
"QueueArn": "arn:aws:sqs:us-east-1:000000000000:sample-queue",
"Policy": "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Sid\": \"0d948ac2a9ea4ed7b2c0609642107f0f\", \"Effect\": \"Allow\", \"Principal\": {\"AWS\": \"*\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:us-east-1:000000000000:sample-queue\", \"Condition\": {\"ArnLike\": {\"aws:SourceArn\": \"arn:aws:sns:us-east-1:000000000000:*\"}}}]}",
"ReceiveMessageWaitTimeSeconds": "0",
"VisibilityTimeout": "30"
}
}