0

用例:需要通过队列从一台服务器向另一台服务器发送一个巨大的文件(100 MB 的倍数)。

目前,我正在使用 Activemq Artemis 服务器在输入流的帮助下通过 tcp 协议将大文件作为 ByteMessage 发送,重试间隔为 -1 以进行无限制的故障转移重试。这里的主要问题是消费者端点连接将主要不稳定,即由于移动性而与网络断开连接。

因此,当在队列中发送文件时,如果连接断开并且重新连接的代理应该从事务中断的位置恢复(例如),同时将 300 mb 的文件传输到消费者队列,假设 100 mb 的一部分被传输到消费者队列服务器,然后连接断开并在一段时间后重新连接,然后进程应该从传输剩余的 200 mb 而不是整个 300 mb 重新开始。

我的问题是哪一个是在 ActiveMQ Artemis 中实现它的最佳协议(tcp、Stomp 和 openwire)和最佳实践(blobmessage、bytemessage 输入流)

4

1 回答 1

1

Apache ActiveMQ Artemis 支持通过网络传输的“大”消息(使用 Netty TCP)。这在文档中有所介绍。注意:此功能仅适用于“核心”客户端。它不适用于 STOMP 或 OpenWire。它也不支持“恢复”功能,在断开连接的情况下,消息传输将从中断的地方继续。

我的建议是在单个消息中以较小的块发送消息,这样在网络缓慢或断开连接的情况下更容易处理。消息可以与相关 ID 或其他东西组合在一起,然后最终客户端可以获取消息的各个部分,并在全部接收到它们后将它们组合在一起。

于 2017-12-29T22:59:56.740 回答