天天看點

Akka學習筆記(六):消息傳遞可靠性

關于消息發送,有兩條基本規則:

最多一次,即不保證消息傳遞可靠性

message ordering per sender–receiver pair

最多一次,意味消息有可能丢失

最少一次,保證消息傳遞可靠,但可能備援

保證隻成功一次,性能最差,消息成功傳遞,不備援

問題是,我們要保證消息傳遞在什麼環節可靠:

消息已經發到網絡上了?

消息被遠端主機接收到了?

消息已經在接收者actor的郵箱裡了?

目标actor是否能處理這個消息?

消息在目标actor上開始處理了?

消息在目标actor上已經處理完畢了?

akka擁抱分布式計算和分布式網絡,并通過消息傳遞來明确實作它,是以它不說謊,而是模拟一個有漏洞的抽象方式。這是在erlang中取得了重大成功的模型,并要求使用者基于此為應用模組化。你可以閱讀erlang 文檔(10.9, 10.10)了解更多。akka與它非常相似。

底線:你是一個開發者,知道你的應用中需要提供哪些保證,那麼你可以飛快又可靠地使用專門的ack和retry來實作(如果你真的需要,大多數情況你并不需要)。使用akka的durable郵箱會有幫助。

actor a1 發送消息 m1, m2, m3 給 a2 actor a3 發送消息 m4, m5, m6 給 a2

意味着:

如果 m1 被投遞了,那麼它一定在 m2 和 m3之前被投遞

如果 m2 被投遞了,那麼它一定在 m3之前被投遞

如果 m4 被投遞了,那麼它一定在 m5 and m6之前被投遞

如果 m5 被投遞了,那麼它一定在 m6之前被投遞

a2 收到 a1 的消息會與收到的 a3的消息交織在一起

因為沒有投遞保證,是以可能會“沒有”,或有“一些”,或“全部”消息到達 a2

繼續閱讀