Blob 訊息
Blob 訊息
現今一個常見的需求是傳送大量的檔案,以便讓消費者進行處理。人們希望利用訊息代理的功能,例如可靠的、交易式的佇列負載平衡與智慧路由,同時還能處理巨大的邏輯檔案。
因此,我們引入了 BlobMessage API,它允許以某些帶外傳輸機制傳送大量的 BLOB(二進制大型物件)。可能的帶外機制可以是 HTTP、FTP、SCP 或其他點對點協定。
現在 ActiveMQSession 上有了新的 createBlobMessage() 方法,您可以用它來傳送 BLOB。
傳送 BlobMessages
您可以透過 JMS 網路傳送 URL,例如存在於某些共享檔案系統或 Web 伺服器上的檔案或 URL,使用以下程式碼:
BlobMessage message = session.createBlobMessage(new URL("http://some.shared.site.com");
producer.send(message);
或者,如果您在用戶端動態建立檔案或串流,您可能需要將檔案上傳到代理或某些伺服器 (Jetty、FTP、WebDav 或其他)。在這種情況下,您可以使用以下其中一種方法:
// lets use a local file
BlobMessage message = session.createBlobMessage(new File("/foo/bar");
producer.send(message);
// lets use a stream
InputStream in = ...;
BlobMessage message = session.createBlobMessage(in);
producer.send(message);
接收 BlobMessages
BlobMessage 是一個常規的 JMS 訊息,因此它可以像其他訊息一樣被接收…
public class MyListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof BlobMessage) {
BlobMessage blobMessage = (BlobMessage) message;
InputStream in = blobMessage.getInputStream();
// process the stream...
}
}
}
設定 BLOB 傳輸策略
您可以在 ActiveMQConnectionFactory、ActiveMQConnection 或 ActiveMQSession 上明確設定 BlobTransferPolicy。通常它是透過 Java 程式碼或 Spring 在 Factory 上完成的。
您可以使用連線設定 URI,透過 URI 來設定這些內容。
例如,您可以連線到代理,同時指定要使用的 uploadUrl,如下所示:
tcp://127.0.0.1:61616?jms.blobTransferPolicy.uploadUrl=http://foo.com