2017-12-27 1762 views
0

使用案例:需要在隊列上從一臺服務器向另一臺發送大型文件(100 MB的倍數)。Activemq - 通過不穩定連接發送大文件的最佳協議

目前,我正在使用Activemq Artemis服務器發送大文件作爲ByteMessage,通過tcp協議輸入流的幫助,重新嘗試間隔爲-1,無限次失敗重試。這裏的主要問題是消費者終端連接將大部分是不穩定的,即由於移動性原因斷開與網絡的連接。

因此,當在隊列中發送文件時,如果連接斷開並且重新連接的代理應該從事務中斷的地方(例如)將300MB的文件傳輸到消費者隊列,則假設100mb的一部分被傳送給消費者隊列服務器,那麼連接在一段時間後被丟棄並重新連接,然後進程應該從剩餘的200MB而不是整個300MB再次傳輸。

我的問題是哪一個是最好的協議(TCP,踐踏和openwire)和最佳實踐(blobmessage,bytemessage輸入流),以實現它在ActiveMQ的阿蒂米斯

回答

1

阿帕奇的ActiveMQ阿蒂米斯支持「大型」,這將消息通過網絡流(使用Netty TCP)。這包括在the documentation。注意:此功能僅適用於「核心」客戶端。它不適用於STOMP或OpenWire。它也不支持「恢復」功能,即在斷開連接的情況下,消息傳送將停止。

我的建議是將消息以較小的塊發送到單個消息中,在網絡緩慢或斷開的情況下更容易處理。消息可以與關聯ID或其他信息一起分組,然後最終客戶端可以收到消息片段,並在收到全部消息後將其組裝在一起。