2014-02-07 41 views
5

我正在通過示例和閱讀文檔,但我仍然不確定如何爲我的場景配置rebus(或者使用公交車很合適) 。我應該如何爲一個生產者和許多消費者設置rebus

我有任務做一個製片人,讓說ImportOrder和CalculateOrderPrice

我要轉儲從生產者消息,並排隊大量的這些消息。 我想要兩個偵聽ImportOrder的客戶端,以及10個偵聽CalculatePriceOfOrder的客戶端。我不希望同一訂單同時進入多個端點,我試圖分散工作量。

生產者配置至今:

<rebus inputQueue="publisher.input" errorQueue="publisher.error" workers="1" maxRetries="5"> 

var adapter = new BuiltinContainerAdapter(); 
      Configure.With(adapter) 
        .Logging(l => l.Log4Net()) 
         .Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig()) 
         .Subscriptions(s => s.StoreInXmlFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "rebus_subscriptions.xml"))) 
         .MessageOwnership(d => d.FromRebusConfigurationSection()) 
         .CreateBus() 
         .Start(); 

消費者配置至今:

<rebus inputQueue="calcserver1.input" errorQueue="calcserver1.error" workers="1" maxRetries="5"> 
<endpoints> 
    <add messages="Messages.RecalculateContractMessage, Messages" endpoint="[email protected]"/> 
</endpoints> 

Configure.With(adapter) 
       .Logging(l => l.Log4Net()) 
       .Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig()) 
       .MessageOwnership(d => d.FromRebusConfigurationSection()) 
       .CreateBus() 
       .Start(); 

     adapter.Bus.Subscribe<RecalculateContractMessage>(); 

我似乎無法配置此設置,如果我使用msmq或sqlserver並不重要。

  • rebus(或任何服務總線類型的解決方案)在這裏聽起來很合適嗎?
  • 我應該使用pub/sub還是普通發送模式?如果消息在一次或幾次只被一個端點處理,那麼這種選擇是否會起作用?
  • 任何人都可以給我一個很好的例子或解釋如何設置這個場景嗎?

回答

1

我會回答你的問題一個接一個:

  • 不畫謎(或解決任何servicebus型)聽起來像一個不錯的選擇嗎?

是的,一個服務總線可以幫助你處理大量的東西(例如序列化,線程等),否則你將不得不自己處理。

  • 我應該使用pub/sub還是plain發送模式?如果消息在一次或幾次只被一個端點處理,那麼這種選擇是否會起作用?

在這種情況下,聽起來像你需要competing consumers類型的任務分配。

這不是的Pub/Sub - 的pub/sub意味着0 .. *消費者對於每個消息實例,但你要只有一個收件人爲每個任務。因此,你會在這種情況下的任務bus.Send

  • 難道有人能給我一個很好的例子或解釋如何設置這個場景嗎?

我寫了several blog posts,試圖展示如何利用Rebus擴展對工作負載的處理,並提供不同支持的傳輸的示例。

您應該相當容易通過查看帖子開始使用, SQL Server作爲你的傳輸。

+1

非常感謝,我閱讀了這個系列文章,他們很棒:)我將從sql server擴展解決方案開始,它聽起來很合適 – Jon

+0

後續問題:假設我們有兩個不同的消息和0。 *每個消息的工作人員。兩個不同的隊列會成爲解決方案嗎?嘗試在同一條總線上處理不同的消息似乎會產生很多問題。 – Jon

+0

我想我現在就明白了,使用bus.Advanced.Routing.Send到特定的隊列並設置每個工作類型以從該隊列中消耗。如果這是建議的方式去,那麼也許我可以貢獻一個樣本,如果你想:) – Jon

相關問題