C# MassTransit-限制在多用户设置中同时处理哪些消息

C# MassTransit-限制在多用户设置中同时处理哪些消息,c#,rabbitmq,masstransit,C#,Rabbitmq,Masstransit,目前,我有一个windows服务,它使用RabbitMQ异步处理来自web应用程序的消息。此服务使用消息上的实体ID查找需要处理的实体。该消息当前未指示应该对实体执行什么操作,因为内部操作日志已经提供了该操作。为了帮助迁移到多个相互竞争的消费者设置,我考虑在RabbitMQ上实现MassTransit 我正在研究如何防止在不同的使用者上同时处理具有相同实体ID的多条消息。MassTransit中是否有任何东西可以让我处理这种情况,或者提供如何处理的建议/资源 我已经看过了最新的过滤器和绿色管道分

目前,我有一个windows服务,它使用RabbitMQ异步处理来自web应用程序的消息。此服务使用消息上的实体ID查找需要处理的实体。该消息当前未指示应该对实体执行什么操作,因为内部操作日志已经提供了该操作。为了帮助迁移到多个相互竞争的消费者设置,我考虑在RabbitMQ上实现MassTransit

我正在研究如何防止在不同的使用者上同时处理具有相同实体ID的多条消息。MassTransit中是否有任何东西可以让我处理这种情况,或者提供如何处理的建议/资源


我已经看过了最新的过滤器和绿色管道分区过滤器。要么这些不符合我的要求,要么我在测试解决方案中配置不正确。我还考虑过对实体进行锁定,以便第二次+并发处理实体的尝试将一直等到第一次完成,但如果没有,我真的不想让一个或多个消费者等待

如果指定密钥提供程序,分区程序应该完全按照您的需要执行,以便为相同的实体返回相同的标识符

此单元测试显示如何设置分区器:

关键在于:

configurator.Consumer(() => new PartitionedConsumer(_completed), x =>
{
    x.Message<PartitionedMessage>(m =>
    {
        m.UsePartitioner(8, context => context.Message.CorrelationId);
    });
});
configurator.Consumer(()=>newpartitionedconsumer(_完成),x=>
{
x、 消息(m=>
{
m、 UsePartitioner(8,context=>context.Message.CorrelationId);
});
});