在ActiveMq 5.15.2中发送和接收文件字符串

时间:2017-12-26 16:11:46

标签: activemq activemq-artemis

我必须通过ActiveMQ发送大量文件,为此我遵循了提供的文档for Large message,但它抛出错误,将文件打包在BytesMessage 中。

我的问题是,在ActiveMQ 5.15.2中发送文件的正确方法是什么

            BytesMessage message = session.createBytesMessage();
            FileInputStream fileInputStream = new FileInputStream(txFile);
            BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream);
            message.setObjectProperty("JMS_AMQ_InputStream", bufferedInput);
            producer.send(message);

的pom.xml

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-all</artifactId>
        <version>5.15.2</version>
    </dependency>

例外:

Caught: javax.jms.MessageFormatException: Only objectified primitive objects, String, Map and List types are allowed but was: java.io.BufferedInputStream@445958d type: class java.io.BufferedInputStream
javax.jms.MessageFormatException: Only objectified primitive objects, String, Map and List types are allowed but was: java.io.BufferedInputStream@445958d type: class java.io.BufferedInputStream
at org.apache.activemq.command.ActiveMQMessage.checkValidObject(ActiveMQMessage.java:538)
at org.apache.activemq.command.ActiveMQMessage.setObjectProperty(ActiveMQMessage.java:504)
at org.apache.activemq.command.ActiveMQMessage.setObjectProperty(ActiveMQMessage.java:488)
at org.apache.activemq.command.ActiveMQBytesMessage.setObjectProperty(ActiveMQBytesMessage.java:918)
at com.svm.mq.test.Producer.run(Producer.java:80)
at java.lang.Thread.run(Thread.java:745)`

2 个答案:

答案 0 :(得分:0)

Blob消息是您的最佳选择。试试这个link了解更多详情:

BlobMessage message = session.createBlobMessage(new File("/foo/bar");
producer.send(message);

答案 1 :(得分:0)

您粘贴的代码(即设置“JMS_AMQ_InputStream”对象属性)适用于ActiveMQ Artemis 核心客户端。这对ActiveMQ 5.x无效。

如果要使用ActiveMQ 5.x“发送”大型消息,则需要使用另一个用户指出的“blob”消息。但是,这仍然需要您使用其他方法发送实际消息。 “blob”消息实际上只是一种指向消息的指针或引用。