2015-06-03 83 views
0

我已經在我的服務器上實現了Prism事件聚合器,其中一個服務發佈一個事件,另一個服務器監聽它。 我申購代碼:棱鏡事件聚合器持久事件

my_aggregator.GetEvent<MyEvent>().Subscribe(Handler,true); 

而發佈我的事件爲:

my_aggregator.GetEvent<MyEvent>().Publish(Payload); 

的事情是,如果用戶是活着的話,一切工作正常。但是,可以說發佈了一個事件,並且用戶(是服務)以某種方式關閉。有沒有一種方式,當用戶再次活着時,它可以響應已觸發的事件。

我已經看過netmsmq結合以及它如何提供服務之間的隊列,即使服務器關閉數據丟失是可以避免的。

我是否必須將其與當前機制掛鉤? 或者有沒有其他方式可以實現? 並且有沒有處理這個的任何標準機制?

編輯:如果您可以提供描述可實現此目的的路徑的鏈接/代碼片段,將會非常有幫助。

回答

1

您正在尋找「存儲轉發」機制。幾年前,我使用this article,Ade Miller中描述的方法來完成同樣的事情。然而,我幾年來對棱鏡的研究並不多,而這篇文章大約在2008年,所以儘管方法可能仍然適用,但對於新版本的棱鏡,實際實現可能並不相同...

+0

該文章鏈接似乎不起作用 –

+0

http://www.ademiller.com/blogs/tech/2008/11/adding-store-and-forward-support-to-the-prism-eventaggregator/ –

+0

@ SyedOsamaMaruf - 我修復了鏈接!看起來像你跟蹤它:) –

1

PRISM事件聚合器只保證當發佈者引發事件時通知訂閱者(同步或異步)。它不能保證用戶正確處理「事件」。在你的情況下,用戶的Handler被調用。這就是所有Event Aggregator可以/應該做的事情。爲了確保你的Handler工作正常(取決於服務是否存在)並且不會錯過任何Payload,你絕對需要類似queue機制。

0

我在codeplex論壇發佈了這個問題,並得到了Bryan Noyes的answer。它是:

恐怕你乾脆在Prism pub-sub事件的設計目的之外。它們是爲鬆散耦合的組件設計的,這些組件在客戶端同時都在內存中,但您不希望在這些客戶端組件之間引入耦合以進行通信。無論是基於MSMQ,RabbitMQ或Service Bus隊列的Windows Server服務總線(或許多其他選項,這些線路取決於是否爲服務器隊列你希望隊列在內部或雲端)。

因此,在短期棱鏡pubsubevents是不是一個好主意,當涉及到服務器端的事件。