我必须通过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)`
答案 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”消息实际上只是一种指向消息的指针或引用。