【发布时间】:2021-03-23 16:12:14
【问题描述】:
我在使用 LocalStack 测试 MassTransit 时遇到问题,但使用 AWS 中的真正 SNS/SQS 一切正常,所以我怀疑这是 LocalStack 的问题,除非 MassTransit 需要配置 ServiceURL 之外的其他东西。见https://github.com/MassTransit/MassTransit/issues/1476
我运行 LocalStack 如下,仅使用 SNS 和 SQS
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"
现在我使用 MassTransit 创建总线并启动它。我为使 MassTransit 与 LocalStack 一起工作所做的唯一更改是在 SNS 和 SQS 中设置 ServiceURL。其余的应该以同样的方式工作(我认为)
var region = "localhost:4566";
var accessKey = "test";
var secretKey = "test";
var busControl = Bus.Factory.CreateUsingAmazonSqs(c =>
{
var hostAddress = new Uri($"amazonsqs://{region}")
var hostConfigurator = new AmazonSqsHostConfigurator(hostAddress);
hostConfigurator.AccessKey(accessKey);
hostConfigurator.SecretKey(secretKey);
hostConfigurator.Config(new AmazonSimpleNotificationServiceConfig {ServiceURL = $"http://{region}"});
hostConfigurator.Config(new AmazonSQSConfig {ServiceURL = $"http://{region}"});
c.Host(hostConfigurator.Settings);
});
运行我的项目时,我可以连接和发布事件,没有错误。我订阅了事件,没有错误。我可以看到在 LocalStack 中正确创建了主题、订阅和队列。
我还可以通过 Commandeer 看到队列中有“不可见”的消息(不确定那是什么),所以问题似乎出在接收部分。
是否需要在 MassTransit 中配置任何其他要求才能使用已发布的事件?
更新 1:一件有趣的事情是,我可以让订阅者长时间收听,在此期间,Commandeer 显示队列中有不可见的消息。 一旦我停止订阅者(和我的应用程序),我就可以看到 Commandeer 将消息从“不可见”移动到“消息”。但无法查看消息。
【问题讨论】:
-
顺便说一句,我使用(旧)docker 镜像在本地运行所有测试和样本:
localstack/localstack latest 86200da6e9fa 10 months ago 880MB -
我会尝试运行当时的旧图像,谢谢。如果除了消费者中的服务 url 之外我没有遗漏任何其他配置,那么它一定是 localstack 的一些东西。可能会切换到内存传输进行自动化测试。塔。
-
已确认,感谢您的帮助,克里斯,您是对的。我已经尝试过使用较旧的图像并且效果很好。虽然不是您提到的那个,但找不到,但这已经足够了。然后我会回答我自己的问题并将错误报告给 localstack
标签: publish-subscribe masstransit localstack