【发布时间】:2020-09-30 18:55:48
【问题描述】:
我已将公共交通指向我的 AWS 账户并为其指定了“范围”。这会为每个范围创建一个 SNS 主题。这是我的配置,范围设置为“开发”:
container.AddMassTransit(config =>
config.AddConsumer<FooConsumer>(typeof(FooConsumerDefinition));
config.UsingAmazonSqs((amazonContext, amazonConfig) =>
{
amazonConfig.Host(
new UriBuilder("amazonsqs://host")
{
Host = "eu-north-1"
}.Uri, h =>
{
h.AccessKey("my-access-key-is-very-secret");
h.SecretKey("my-secret-key-also-secret");
h.Scope("development", true);
});
amazonConfig.ConfigureEndpoints(amazonContext);
});
);
// Somewhere else:
public class FooConsumerDefinition : ConsumerDefinition<FooConsumer>
{
public FooConsumerDefinition ()
{
ConcurrentMessageLimit = 1;
// I used to set EndpointName, but I stopped doing that to test scopes
}
}
如果我更改范围并再次运行它,我会获得更多以我的范围为前缀的 SNS 主题和订阅。比如:
development_Namespace_ObjectThatFooRecieves
但是,SQS 队列没有前缀并且数量不会增加。
Foo
您运行的范围越多,“Foo”获得的 SNS 订阅就越多。最重要的是,如果我启动一个配置为“开发”的消费应用程序,它将开始消费所有不同范围的所有消息。因此,我没有得到任何环境分离。
是否有这些不同的主题提供不同的队列?有没有办法在我的主题旁边整齐地为我的队列添加前缀?
其实,“Scope”配置如果只是把topic分出来,然后都去同一个队列乱处理,那还有什么意义呢?
注意。我不认为这里的解决方案是只使用单独的订阅。这是很大的开销,我觉得“范围”应该可以工作。
【问题讨论】: