對於模糊的標題很抱歉 - 我想不出一個簡潔的方式來問這個問題。我認爲一個具體的例子會有所幫助。什麼是強制消息處理程序丟棄多個請求消息的最佳方式
我有一個資源密集型的過程,我想移入一個單獨的服務,然後發送消息來啓動它。該消息將通過在網站上點擊的按鈕發送(在第一次迭代中)。
問題是,要求點擊十次按鈕不會運行該過程十次,甚至排隊十次運行的進程,因爲它是如此資源密集型的。我們的產品經理在流程運行時會喜歡它,其他任何消息都會被丟棄。但是一旦進程完成並且資源被釋放,消息傳遞端點將對請求消息起作用並再次運行該進程。
我們目前正在用阻塞和丟棄消息的信號量來解決這個問題,但我總是對並行處理和線程化保持警惕。
我認爲一個傳奇可能是一個很好的方法來處理這個問題,你可以讓你的傳奇開始於請求消息,然後任何其他進來的人只會打開現有的傳奇實例,它會做一個無操作在那些額外的消息。當這個傳奇完成後,下一個要求這個過程的信息將開始一個新的傳奇。
我也知道你可以在進程運行時禁用按鈕,但是如果可能的話,我們希望避免暫時將按鈕耦合到進程。也就是說,我們寧願不從網站上查詢流程是否完成。
是否有行業標準或優雅的方式來處理這可能是我沒有想到的?如果可能的話,我真的很想避免並行和信號量,但是我也不想過分複雜化我的解決方案。任何幫助表示讚賞。
如果您可以提供MassTransit特定信息,因爲這是我正在使用的ESB,因此可獲得獎勵積分。
不是一個壞建議。我沒有想過保存過程的結束時間,然後丟棄發送時間在處理消息結束時間之前的任何消息。我個人認爲這個要求有點誤導,但我試着向產品所有者解釋,在過程結束後1ms推送網站上的按鈕與允許消息排隊相同,但他們堅持認爲排隊的消息應該被丟棄。 – Dan