2017-02-15 46 views
0

我正在嘗試使用MassTransit和Azure Service Bus創建一個應用程序,請參閱這篇文章http://docs.masstransit-project.com/en/latest/advanced/turnout.html如何使用MassTransit從道岔隊列中檢索消息?

在Azure Service Bus中啓動應用程序後,創建了兩個隊列(其中一個隊列已過期)。而且在我執行訂閱者之後被創建的投票隊列和消息被從main移動到這個隊列。如果用戶工作,我可以檢索郵件。如果我停止用戶(殺死進程或關機)消息仍在輪流隊列中。下次我執行訂閱者時,它會創建新的投票隊列,並且不會檢索已處理但未完成的郵件。那麼,我怎麼能不失去信息呢?另外我如何設置在一個節點中處理的消息的最大數量限制?

_busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg => 
     { 
      var host = cfg.Host("********", h => 
      { 
        //h.OperationTimeout = TimeSpan.FromMinutes(1); 
      }); 
      cfg.MaxConcurrentCalls = 1; 
      cfg.UseServiceBusMessageScheduler(); 
      cfg.TurnoutEndpoint<ISimpleRequest>(host, "test_longruning", 
       e => 
       { 
        e.SuperviseInterval = TimeSpan.FromSeconds(30); 
        e.PartitionCount = 1; 
        e.SetJobFactory(async context => 
         { 
          Console.WriteLine($"{DateTime.Now} Start Message: {context.Command.CustomerId}"); 
          await Task.Delay(TimeSpan.FromMinutes(7), context.CancellationToken); 
          Console.WriteLine($"{DateTime.Now} End Message: {context.Command.CustomerId}"); 
         }); 
       }); 
     }); 

回答

0

首先,我應該警告您,Turnout在這一點上是非常實用的。雖然它在快樂的道路上運行,但服務故障的處理還沒有完全消除。雖然消息生存時間設置應該以命令返回正確的隊列結束,但它還沒有經過廣泛的測試。

也就是說,您可以使用ServiceBusExplorer將消息移回適當的隊列,這就是我的做法。它是手動的,但它是唯一真正能夠完全控制服務總線環境的工具。

相關問題