2013-03-06 46 views
1

除了延遲之外,是否有一個顯着的缺點循環瀏覽一系列Web服務來發布事件?cqrs事件庫調度通過網絡服務

Dispatcher(event) { 
    var services = getServices(); 
    for each service in services { 
     callService(service, event); 
    } 
} 

編輯:
與之相對的是什麼? - Peter Ritchie

  • 使用Web服務而不是MSMQ或nServiceBus。

其他問題 - 魯文Bartelink

  • 使用joliver的eventstore。
  • web服務將是webapi restfull服務(內部)或「訂閱」到事件的第三方服務。
  • 循環瀏覽Web服務,因爲每個Web服務都是需要分派的地址。
  • 沒有C#代碼,因爲我還沒有到那一點。
  • 我仍在評估整個項目的技術,有一個問題,決定把它放在堆棧溢出來看看每個人可能在做什麼。從我的研究

補充信息昨日:
在選擇通信方式而言,其有效瞭解企業服務總線(ESB)http://en.wikipedia.org/wiki/Enterprise_service_bus。在.net世界中,nservicebus似乎很受歡迎,但不是免費的,公共交通是免費的,但我在建立和運行樣本時遇到了麻煩。 TT

通過他們的傢伙公共交通落後的一個消息VS Web服務的一個很好的概述:http://blip.tv/ineta-live/event-driven-architecture-by-chris-patterson-north-dallas-net-ug-on-02-03-2010-3193457

+1

而不是什麼? – 2013-03-06 01:31:33

+0

使用什麼事件存儲/方法。您對Web服務的定義是什麼?你爲什麼要循環。他們都需要嗎?你還試過了什麼?爲什麼不把它轉換成真正的C#。你是否意識到人們操縱事物的典型方式是讓事件的分派是異步的。你打算如此保留它嗎? – 2013-03-06 10:23:51

回答

2

發佈事件直接從您的用戶面臨應用層調用各種Web服務可能證明麻煩,如果:

  1. 遠程服務不可用,
  2. 遠程服務被打破,並返回意外的錯誤代碼,
  3. 遠程服務是slooooow和您的用戶沒有雙向一旁等着摹球迷,

通過通過隊列發佈事件的一些工作程序,resposible用於調用各種Web serivces,您的前端應用程序不必失敗由於上述任何。

+0

因此,使用像MSMQ,nServiceBus,公共交通等的東西來堅持事件的某個地方(數據庫,文件系統等),並有一個後臺應用程序(時間作業,Windows服務等),從某處拉啓動Web服務? – 2013-03-06 14:56:41

+0

@ ton.yeung您的調度員將東西放入隊列中。您的投影然後運行任意數量的處理器(例如Denormalizers)來響應這些消息。儘管一個這樣的處理器的職責是**將數據推送到一個web服務是合理的,但你最好重新調整方向,讓任何需要的東西將其從隊列或主題/ pub-sub事物中拉出來。 – 2013-03-07 09:18:15

+0

@ ton.yeung:Excatly。 MSMQ或RabbitMQ都可以用作持久隊列,既能夠存儲消息,又不需要任何輔助數據庫。 NServiceBus,Mass Transit和Rebus是使您能夠輕鬆發送和接收來自這些隊列的消息的框架。 – 2013-03-07 10:23:26