在 ActiveMQ“经典”5.15.2 中发送和接收文件字符串

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

我必须通过 ActiveMQ 发送大文件,为此我遵循了提供的文档 对于大消息,但它抛出错误,将文件打包在 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)`
activemq activemq-artemis
2个回答
0
投票

您粘贴的代码(即设置

JMS_AMQ_InputStream
对象属性)适用于 ActiveMQ Artemis 核心客户端。这不适用于 ActiveMQ“经典”。

如果您想使用 ActiveMQ“经典”“发送”大消息,那么您将需要使用另一个用户指出的“blob”消息。但是,这仍然需要您使用其他方法发送实际消息。 “blob”消息实际上只是消息的一种指针或引用。


0
投票

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

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