2016-01-23 14 views
1

研究優先級隊列的示例在線看來標準是發佈者設置消息的優先級。如果該消息本身具有意味着「檢測到火災」的意思,則這是有意義的。帶有rebus的優先級隊列,由消費者而不是發佈商控制

如果優先級更多地由消費者支配,該怎麼辦?我的情景是這樣的,我有100個客戶產生消息,客戶A希望我有一個專門的消息消費者爲他們的消息。每當這種情況發生時,我不希望改變我所有的生產者。 (也許他們停止支付,也許別人也想這樣做,也許我們使用這種方式來減輕一些devops問題...)

有沒有辦法我可以做到這一點?消費者能夠「掃描」隊列中的所有消息並且能夠「處理」消息嗎?

回答

1

沒有辦法,真的,Rebus能夠「掃描」消息或以任何其他方式事先知道哪些消息是可用的,以便選擇一個來處理。

通常,在消息隊列中,當您收到消息隊列時,您只會收到下一條消息。

如果在需要處理消息時需要某種智能(對我來說這聽起來像是這樣),我建議你只是通過在數據庫中將它們排列爲「工作項」來處理消息,然後定期或不斷選擇下一個工作項目進行工作。

這樣,您的工作人員在選擇下一個工作項目時可以執行任意複雜的邏輯 - 例如,通過跳過那些沒有支付,按客戶計劃排序(例如優先考慮「黃金客戶」而不是「白銀客戶」)等等。

這樣做會增加IMO的優勢,它會使它成爲更加突出的部分應用程序的邏輯,我覺得在這種情況下會很好。

這聽起來合理嗎?

+0

感謝您對它的權威答案。如果以後需要使用此功能,我可以稍後再進行探索。 – XenoPuTtSs