MassTransit - 限制在多消费者设置中同时处理哪些消息

时间:2017-04-04 12:43:06

标签: c# rabbitmq masstransit

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

我正在研究如何防止具有相同实体ID的多条消息同时在不同的消费者上进行处理。 MassTransit中是否有任何内容可以让我处理这种情况或建议/资源如何处理?

我查看了最新的过滤器和绿色管道分区过滤器。要么这些都没有做我想要的,要么我在我的测试解决方案中错误地配置了它。我还考虑过对实体进行锁定,以便处理实体的第二个+并发尝试将等到第一个完成,但我真的不想让一个或多个消费者等待,如果我不这样做的话。也有。

1 个答案:

答案 0 :(得分:0)

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

此单元测试显示分区程序的设置方式: https://github.com/MassTransit/MassTransit/blob/master/src/MassTransit.Tests/Pipeline/PartitionByKey_Specs.cs

关键是:

configurator.Consumer(() => new PartitionedConsumer(_completed), x =>
{
    x.Message<PartitionedMessage>(m =>
    {
        m.UsePartitioner(8, context => context.Message.CorrelationId);
    });
});