2017-04-04 2 views
0

현재 RabbitMQ를 사용하여 웹 응용 프로그램에서 비동기 메시지를 처리하는 단일 Windows 서비스가 있습니다. 이 서비스는 메시지에서 엔터티 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); 
    }); 
}); 
파티션 프로그램이 설치 방법

유닛이 시험 도시

관련 문제