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

问题描述 投票:1回答:2

我必须通过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.hml

    <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)`
activemq activemq-artemis
2个回答
0
投票

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

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


0
投票

Blob消息是你的方式。试试这个link了解更多细节:

BlobMessage message = session.createBlobMessage(new File("/foo/bar");
producer.send(message);
© www.soinside.com 2019 - 2024. All rights reserved.