使用 MassTransit 在 Azure 服务总线队列上配置重复数据删除
Configure Deduplication on Azure Service Bus Queue with MassTransit
我发现以下问题 () 关于在 MassTransit 中从生产者应用程序配置发布主题时如何设置 RequiresDuplicationDetection 属性。但是,对于使用 Send
而不是 Publish
.
传输到队列的命令,我无法找到如何执行此操作
此外,我发现在配置一个相关队列的使用者时,我可以轻松设置 属性,如下所示。然而,这对我的用例来说并不理想,如果可能的话,我更希望生产者在启动和创建队列时设置这个 属性。
cfg.ReceiveEndpoint(queue, e =>{
e.RequiresDuplicateDetection = true;
e.ConfigureConsumer<JobEventConsumer>(registrationContext, consumerConfig =>{
consumerConfig.UseMessageRetry(r =>{
r.Interval(10, TimeSpan.FromMilliseconds(200));
r.Ignore<ValidationException>();
});
});
});
更新: 经过更多调查,我还发现在全局配置级别将 属性 设置为 true 似乎也不起作用。代码如下
class Program {
static async Task Main(string[] args) {
EndpointConvention.Map<ExtractionRequest>(new Uri("queue:test-queue"));
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>{
cfg.Host("My connection string");
cfg.RequiresDuplicateDetection = true;
cfg.EnablePartitioning = true;
});
await busControl.StartAsync();
try {
do {
string value = await Task.Run(() =>{
Console.WriteLine("Enter message (or quit to exit)");
Console.Write("> ");
return Console.ReadLine();
});
if ("quit".Equals(value, StringComparison.OrdinalIgnoreCase)) break;
await busControl.Send<ExtractionRequest>(new {});
}
while (true);
}
finally {
await busControl.StopAsync();
}
}
}
public interface ExtractionRequest {}
欢迎提供有关如何从生产者那里为队列打开 RequiresDuplicationDetection 的任何建议。
提前致谢,詹姆斯。
您不能从消息发送者设置队列属性,这是接收端点的责任。
接收端点是负责的组件,因为它正在声明队列和相关属性。
发布之所以不同是因为主题可以由生产者配置,因为一个主题可能有多个消费者订阅。
我发现以下问题 (Send
而不是 Publish
.
此外,我发现在配置一个相关队列的使用者时,我可以轻松设置 属性,如下所示。然而,这对我的用例来说并不理想,如果可能的话,我更希望生产者在启动和创建队列时设置这个 属性。
cfg.ReceiveEndpoint(queue, e =>{
e.RequiresDuplicateDetection = true;
e.ConfigureConsumer<JobEventConsumer>(registrationContext, consumerConfig =>{
consumerConfig.UseMessageRetry(r =>{
r.Interval(10, TimeSpan.FromMilliseconds(200));
r.Ignore<ValidationException>();
});
});
});
更新: 经过更多调查,我还发现在全局配置级别将 属性 设置为 true 似乎也不起作用。代码如下
class Program {
static async Task Main(string[] args) {
EndpointConvention.Map<ExtractionRequest>(new Uri("queue:test-queue"));
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>{
cfg.Host("My connection string");
cfg.RequiresDuplicateDetection = true;
cfg.EnablePartitioning = true;
});
await busControl.StartAsync();
try {
do {
string value = await Task.Run(() =>{
Console.WriteLine("Enter message (or quit to exit)");
Console.Write("> ");
return Console.ReadLine();
});
if ("quit".Equals(value, StringComparison.OrdinalIgnoreCase)) break;
await busControl.Send<ExtractionRequest>(new {});
}
while (true);
}
finally {
await busControl.StopAsync();
}
}
}
public interface ExtractionRequest {}
欢迎提供有关如何从生产者那里为队列打开 RequiresDuplicationDetection 的任何建议。
提前致谢,詹姆斯。
您不能从消息发送者设置队列属性,这是接收端点的责任。
接收端点是负责的组件,因为它正在声明队列和相关属性。
发布之所以不同是因为主题可以由生产者配置,因为一个主题可能有多个消费者订阅。