JMS 流
已弃用
此功能已弃用,鼓励最终用户**不要**使用它。此功能将在以后的 ActiveMQ Classic 版本中删除。
有时您需要以可靠的方式在网络上传输真正的大文件(许多 Gb)。JMS API 要求 JMS 客户端能够一次将消息保留在内存中,因此在网络上传输超过 1 Gb 的消息最终会导致客户端内存使用过高。
为了解决此问题,ActiveMQ Classic 支持与常规 JMS 生产者和消费者配合使用的常规InputStream 和OutputStream 抽象。
这使您可以使用 Java 中熟悉的流来发送或接收任何大小的消息(前提是您的文件系统能够处理它们,同时保持低内存开销。
针对 4.2 的用户
如果您正在使用 4.2 及更高版本的 ActiveMQ Classic,我们强烈建议您尝试使用Blob 消息,它提供了处理大文件更灵活的机制,并完全支持使用 HTTP/FTP 的带外传输,以及允许将外部资源发送到 JMS 网络中。
使用 JMS 流
要使用流,只需根据您是使用connection.createInputStream() 读取还是写入,创建输入流或输出流。
connection.createOutputStream() 方法。
例如
ActiveMQConnection connection = ...;
Destination destination = new ActiveMQQueue("FOO.BAR");
OutputStream out = connection.createOutputStream(destination);
// write the file to out
out.close();
或者消费一条大型消息
ActiveMQConnection connection = ...;
Destination destination = new ActiveMQQueue("FOO.BAR");
InputStream in = connection.createInputStream(destination)
// read the stream...
in.close();
存在支持传递额外参数的重载 createInputStream/createOutputStream 方法。
有关更多参考,请参阅 javadoc。
注意
AMQ 3.x 中的对应类是
- JMSInputStream
- JMSOutputStream