簡體   English   中英

棱鏡事件聚合器持久事件

[英]Prism event aggregator Persistent Events

我已經在服務器上實現了Prism事件聚合器,在該服務器上,服務發布了一個事件,另一個監聽了該事件。 我的訂閱代碼:

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

而我將活動發布為:

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

問題是,如果訂戶還活着,那么一切都會很好。 但是,可以說事件已發布,而訂戶(是服務)以某種方式關閉了。 有沒有一種方法可以使訂戶再次活躍起來,可以響應被觸發的事件。

我研究了netmsmq綁定及其如何在服務之間提供隊列,因此即使服務器關閉,也可以避免數據丟失。

我是否必須將其與當前的機制掛鈎? 還是有其他方法可以實現? 是否有任何處理此問題的標准機制?

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

PRISM Event Aggregator僅保證發布者引發事件時(同步或異步)通知訂閱者。 它不能保證訂戶能夠正確處理“事件”。 在您的情況下,將調用訂閱者的Handler 這就是Event Aggregator可以/應該做的所有事情。 為了確保您的Handler運作良好(取決於服務是否處於活動狀態)並且不會錯過任何Payload ,您絕對需要類似queue機制的東西。

您正在尋找一種“存儲轉發”機制。 幾年前,我使用了Ade Miller本文中描述的方法來完成同樣的事情。 但是,幾年來我對Prism並沒有做太多事情,而本文大約在2008年,因此雖然所描述的方法可能仍然適用,但對於較新版本的Prism而言,實際實現可能並不相同。

我在Codeplex論壇上發布了這個問題,並從Bryan Noyes得到了答案 它是:

恐怕您完全不了解Prism pub-sub活動的目的。 它們是為在客戶端同時存儲在內存中的松散耦合的組件而設計的,但是您不想在這些客戶端組件之間引入耦合以便它們進行通信。 對於這種情況,您正在談論某種服務器端隊列是正確的答案,無論它們是基於MSMQ,RabbitMQ還是Windows Server Service Bus的Service Bus隊列(或其他路線選項,具體取決於是否您希望隊列在內部還是在雲中)。

因此,簡而言之,對於服務器端事件,pubsubevents不是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM