JMS 流

功能 > 消息功能 > JMS 流

已弃用

此功能已弃用,鼓励最终用户**不要**使用它。此功能将在以后的 ActiveMQ Classic 版本中删除。

有时您需要以可靠的方式在网络上传输真正的大文件(许多 Gb)。JMS API 要求 JMS 客户端能够一次将消息保留在内存中,因此在网络上传输超过 1 Gb 的消息最终会导致客户端内存使用过高。

为了解决此问题,ActiveMQ Classic 支持与常规 JMS 生产者和消费者配合使用的常规InputStreamOutputStream 抽象。

这使您可以使用 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

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据Apache 许可证 2.0 许可。