2016-11-25 20 views
0

我正在使用MassTransit 3.0與RabbitMq。我想知道我的隊列是否爲空,因爲如果需要從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 = 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 
相關問題