利用MQ實現大檔案交換

2021-06-14 00:58:41 字數 1880 閱讀 7724

本文介紹了如何利用activemq提供的機制,實現大檔案斷點續傳,從而可以在低速網路的情況下,不會因為網路的故障而使整個大檔案重新傳輸。本文介紹的這個實現可以大大的提高業務處理效率,並且可以對本文提供的思路進行擴充套件以完成更加複雜的功能。

message broker:訊息伺服器

jms streams:jms流物件。

blob messages: binary large object messages的英文簡稱,即二級製大物件訊息。

在利用activemq實現大檔案傳輸的應用系統中,存在以下幾種架構。

通過jms的streammessage或者bytesmessage傳輸檔案的時候,必須一次將整個檔案全部載入到記憶體當中,這種傳送檔案效率低下而且需要占用大量的記憶體資源,如果一旦檔案比記憶體大的話,將無法提供服務。

通過jms streams,花費較小的記憶體就可以傳輸比記憶體空間還大的檔案,其結構如下圖所示:

圖3.1.1 通過jms streams傳輸檔案

傳送方**片段:

activemqconnection connection = ...;

destination destination = new activemqqueue("sdo.amo.filetransfer");

outputstream out = connection.createoutputstream(destination);

// write the file to out

out.close();

接收方**片段:

activemqconnection connection = ...;

destination destination = new activemqqueue("sdo.amo.filetransfer");

inputstream in = connection.createinputstream(destination)

// read the stream...

in.close();

但是通過jms streams傳輸檔案也存在一些不足之處:

不支援斷點續傳,可靠性較差;

不支援發布訂閱模式。

由於jms streams的種種不足,限制了其用於傳輸大檔案的功能。因此,activemq在jms的基礎上建立了一種新的訊息型別------blobmessage。

因為派生與jms的message物件,通過blobmessage傳輸大檔案可以利用activemq訊息broker的所有特性,如高可靠性、事務支援、發布訂閱......

blob messages是通過帶外傳輸(out-of-band transport)的機制來實現大檔案傳輸的,在檔案傳輸的過程中,通過http、ftp、scp或其他點對點的協議來進行檔案的傳輸,同時,通過blobmessage來傳送控制資訊以及檔案的驗證資訊。其結構圖如下:  

圖3.2.2 通過blob messages傳輸檔案

對於大檔案傳輸的應用,我們主要實現以下**所示的功能。

功能點功能子點

大檔案傳輸

沒有確定的接收者

有確定的乙個接收者

有確定的多個接收者

分塊傳輸

多執行緒併發分快傳輸

系統糾錯機制

網路中斷糾錯機制

客戶端應用程序突然死掉糾錯機制

mq server程序突然死掉糾錯機制

**4.1 功能列表

利用MQ實現大檔案交換

本文介紹了如何利用activemq提供的機制,實現大檔案斷點續傳,從而可以在低速網路的情況下,不會因為網路的故障而使整個大檔案重新傳輸。本文介紹的這個實現可以大大的提高業務處理效率,並且可以對本文提供的思路進行擴充套件以完成更加複雜的功能。message broker 訊息伺服器 jms strea...

C 利用Stream讀寫大檔案

在日常生活中,可能會遇到大檔案的讀取,不論是什麼格式,按照儲存檔案的格式讀取大檔案,就會在buffer中看到相關的檔案頭合內容,以一次.txt檔案訪問為例。using system.io private void button2 click object sender,eventargs e byt...

C 利用快取分塊讀寫大檔案

c 利用快取分塊讀寫大檔案,供程式設計客棧大家參考,具體內容如下 在日常生活中,可能會遇到大檔案的讀取,不論是什麼格式,按照儲存檔案的格式讀取大檔案,就會在buffer中看到相關的檔案頭合內容,以一次.txt檔案訪問為例。using system.io 首先建立demo檔案,此處檔案大小沒關係,只是...