ActiveMQ Blob Messages(2進制大文件)

有些時候,我們需要傳遞Blob(Binary Large OBjects)消息,可以按照如下方式:
配置BLOB Transfer Policy,可以在發送方的連接URI上設置,如:
"tcp://192.168.1.106:61679?jms.blobTransferPolicy.uploadUrl=http://192.168.1.10
6:8171/fileserver/"
Sending BlobMessages,有幾種方式:
1:如果你發送到的文件或者URL存在,比如發給共享文件系統或者是Web server上的web應用,那麼你可以使用如下方式:
BlobMessage message = session.createBlobMessage(new URL("http://some.shared.site.com");
producer.send(message);
2:也可以在客戶端動態的創建文件流,如下:
BlobMessage message = session.createBlobMessage(new File("/foo/bar");
或者:
InputStream in = ...;

BlobMessage message = session.createBlobMessage(in);

Blob文件消息發送端:

public class BlobMessageSender {
    public static void main(String[] args) throws Exception{
        ConnectionFactory connectionFactory =
                new ActiveMQConnectionFactory
                        ("tcp://127.0.0.1:61616?jms.blobTransferPolicy.uploadUrl=http://127.0.0.1:8161/fileserver/");
        Connection connection = connectionFactory.createConnection();
        connection.start();
        ActiveMQSession session = (ActiveMQSession)connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("my-queue2");
        MessageProducer producer = session.createProducer(destination);
        BlobMessage message = session.createBlobMessage(new File(System.getProperty("user.dir") + File.separator + "pom.xml"));
        producer.send(message);
        session.commit();
        session.close();
        connection.close();

    }
}
Receiving BlobMessages示例:
if (message instanceof BlobMessage) {
BlobMessage blobMessage = (BlobMessage) message;
InputStream in = blobMessage.getInputStream();
// process the stream...

}

public class BlobMessageReceiver {
    public static void main(String[] args) throws Exception{
        ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
        Connection connection = cf.createConnection();
        connection.start();
        final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("my-queue2");
        MessageConsumer consumer = session.createConsumer(destination);
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                if (message instanceof BlobMessage) {
                    BlobMessage blobMessage = (BlobMessage) message;
                    try {
                        InputStream in = blobMessage.getInputStream();// process the stream...
                        byte[] bs = new byte[in.available()];
                        in.read(bs);
                        in.close();
                        System.out.println(new String(bs));
                        session.commit();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

發佈了56 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章