2017-04-04 43 views
0

目前,我有一個Windows服務使用RabbitMQ處理來自Web應用程序的異步消息。該服務使用消息上的實體ID來查找需要處理的實體。該消息目前並未指出應該對實體執行什麼操作,因爲這已由內部操作日誌提供。爲了幫助轉向多種競爭的消費者設置,我正在考慮通過RabbitMQ實施MassTransit。MassTransit - 限制在多用戶設置中同時處理哪些消息

我在看如何防止同一個實體ID同時在不同的消費者處理多個消息。 MassTransit中是否有任何內容可以幫助我處理這種情況或有關如何處理的建議/資源?

我看過最新的過濾器和綠色管道分區過濾器。要麼這些不做我想要的,要麼我在我的測試解決方案中錯誤地配置了它。我也考慮過對實體進行鎖定,以便第二次併發處理實體的嘗試將一直等到第一次完成時爲止,但如果我沒有,我真的不想捆綁一個或多個等待的消費者。

回答

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); 
    }); 
});