如何解决用于自动生成启用重复检测的 Azure 服务总线主题的 Masstransit非 DI配置
我发现没有任何 Masstransit 配置允许在启用重复检测的情况下创建服务总线主题。
你可以很简单地用队列来做到这一点。但是对于Topics来说,这似乎有点神秘。
有人有工作样本吗?
也许不可能。
我一直在尝试使用 Bus.Factory.CreateUsingAzureServiceBus 方法提供的 IServiceBusBusFactoryConfigurator。
我原以为使用 IServiceBusBusFactoryConfigurator.Publish 方法和 IServiceBusBusFactoryConfigurator.SubscriptionEndpoint 方法可以完成任务,但经过无数次试验后,我没有找到解决方案。
解决方法
要配置具有重复检测的消息类型主题,您必须在生产者和消费者中都配置发布拓扑(每个总线实例只需要配置一次,但如果您的生产者是单独的总线实例,它将还需要配置)。该主题也必须不存在,因为一旦在 Azure 中创建它就不会更新。
配置发布拓扑:
namespace DupeDetection
{
public interface DupeCommand
{
string Value { get; }
}
}
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
{
cfg.Publish<DupeCommand>(x => x.EnableDuplicateDetection(TimeSpan.FromMinutes(10)));
cfg.ReceiveEndpoint("dupe",e =>
{
e.Consumer<DupeConsumer>();
});
}
消费者正常(无需特殊设置)。
class DupeConsumer :
IConsumer<DupeCommand>
{
public Task Consume(ConsumeContext<DupeCommand> context)
{
return Task.CompletedTask;
}
}
我添加了一个单元测试来验证这种行为,并且可以确认当具有相同 MessageId
的两条消息背靠背发布时,只有一条消息传递给消费者。
测试日志输出:
10:53:15.641-D Create send transport: sb://masstransit-build.servicebus.windows.net/MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection/DupeCommand
10:53:15.784-D Topic: MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection/DupeCommand (dupe detect)
10:53:16.375-D SEND sb://masstransit-build.servicebus.windows.net/MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection/DupeCommand dc3a0000-ebb8-e450-949c-08d8e8939c7f MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection.DupeCommand
10:53:16.435-D SEND sb://masstransit-build.servicebus.windows.net/MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection/DupeCommand dc3a0000-ebb8-e450-949c-08d8e8939c7f MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection.DupeCommand
10:53:16.469-D RECEIVE sb://masstransit-build.servicebus.windows.net/MassTransit.Azure.ServiceBus.Core.Tests/input_queue dc3a0000-ebb8-e450-949c-08d8e8939c7f MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection.DupeCommand MassTransit.IConsumer<MassTransit.Azure.ServiceBus.Core.Tests.DupeDetection.DupeCommand>(00:00:00.0017972)
您可以看到主题声明中显示的 (dupe detect)
属性。
这是我最终找到的解决方案。它不依赖于尝试任何 ReceiveEndpoint 或 SubscriptionEndpoint 配置方法,这些方法似乎从来没有给我想要的东西。
Generic struct 'Unmanaged' requires that 'ContentView' be a class type
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。