问题描述
我正在尝试将ASB主题上的$answers = AnswerVersion::query()->with('answer')
->whereHas('answer.project',function ($query) use ($project) {
$query->where('project_id',$project->id);
});
属性配置为true,但是似乎没有遵循主RequiresDuplicateDetection
上的设置:
IServiceBusFactoryConfigurator
在ASB上为此订阅创建的任何主题似乎都不符合该设置。我发现了一种(也许很怪异的)方法,可以通过钩住我消息类型的 var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
{
cfg.Host("ASB_ConnectionString");
cfg.SubscriptionEndpoint<ExtractionRequest>("Test",e =>
{
e.LockDuration = TimeSpan.FromMinutes(1);
e.MaxAutoRenewDuration = TimeSpan.FromMinutes(5);
e.AutoDeleteOnIdle = TimeSpan.FromHours(1);
});
cfg.RequiresDuplicateDetection = true;
});
上的TopicDescription
对象来实现。
PublishTopology
此替代方法后正确创建的主题。如果任何人都可以对此有所了解,那就太好了。
解决方法
您可以在总线配置器中配置主题的发布拓扑:
cfg.Publish<ExtractionRequest>(x => x.RequiresDuplicateDetection = true);
您应该先配置拓扑,然后再配置订阅端点,在这种情况下,订购尤其重要。
在您的示例中,指定cfg.RequiresDuplicateDetection = true;
仅配置总线接收端点,而不配置订阅端点或任何其他已配置的接收端点。