2016-11-25 7 views
0

RabbitMq와 함께 MassTransit 3.0을 사용하고 있습니다. 나는 db에서 임시 테이블을 삭제해야하기 때문에 대기열이 비어 있는지 알고 싶습니다. 큐가 비어 있는지 확인하는 방법을 알 수 없습니다.대기열이 비어 있고 MassTransit 3.0을 사용하여 읽을 메시지가 더 이상 없는지 확인하는 방법

var inventoryBus = new InventoryBus(new RabbitServiceConfig()); 
inventoryBus.Instance.Start(); 
inventoryBus.Instance.ConnectConsumer<InventoryConsumer>(); 

========== 소비자 =============== 또한

public class InventoryConsumer: IConsumer<IAvailableStockChanged> 
{ 
    private readonly IInventoryService _service; 
    public InventoryConsumer() { 

    } 
    public InventoryConsumer(IInventoryService service) { 
     _service = service; 
    } 

    public async Task Consume(ConsumeContext<IAvailableStockChanged> context) { 
     await Console.Out.WriteLineAsync("Message received....." + context.Message.Sku); 
     //_service.AddOrUpdate(context.Message); 
    } 
} 

, 난 DB 작업을 수행하고 때 이후 모든 메시지를 읽었을 때 대기중인 메시지를 읽지 않도록 소비자를 중지하고 싶습니다.

어떤 도움을 주시면 감사하겠습니다 ...

+1

참조 http://stackoverflow.com/questions/33377354/how-to-get-size-number-of-messages-of-a-masstransit-ibus – stuartd

답변

1

링크는 위 그림과 같이, 대기열에서 메시지를 확인하려면 당신에게 API를 가져옵니다.

그러나 저는 버스를 설치하고 소비자를 연결하기 위해 취하는 접근 방식이 문제를 일으킬 것이라고 지적하고 싶습니다.

특정 큐에 소비자를 등록하는 방법에 대한 설명서를보고하십시오 것은 : 한 번에 하나의 메시지를 처리 ​​할 경우

http://docs.masstransit-project.com/en/latest/usage/consumer.html#connecting-a-message-consumer 또한

, 당신은 프리 페치는 1로 계산 설정할 수 있습니다 (그리고 너무 느리면 동시성 제한 필터를 사용하십시오).

동시 처리 제한 필터는 위의 항목 외에도 작동합니다.

e.PrefetchCount = 20; // in case your messages are small and fast 
e.UseConcurrencyLimit(1); // sets one at a time message handling 

동시성 제한을 사용하면 재시도 정책을 설정할 수도 있습니다.

e.UseRetry(x => x.Interval(10, 500)); // retry 10 times every 500ms