2017-12-27 560 views
0

使用案例:需要在队列上从一台服务器向另一台发送大型文件(100 MB的倍数)。Activemq - 通过不稳定连接发送大文件的最佳协议

目前,我正在使用Activemq Artemis服务器发送大文件作为ByteMessage,通过tcp协议输入流的帮助,重新尝试间隔为-1,无限次失败重试。这里的主要问题是消费者终端连接将大部分是不稳定的,即由于移动性原因断开与网络的连接。

因此,当在队列中发送文件时,如果连接断开并且重新连接的代理应该从事务中断的地方(例如)将300MB的文件传输到消费者队列,则假设100mb的一部分被传送给消费者队列服务器,那么连接在一段时间后被丢弃并重新连接,然后进程应该从剩余的200MB而不是整个300MB再次传输。

我的问题是哪一个是最好的协议(TCP,践踏和openwire)和最佳实践(blobmessage,bytemessage输入流),以实现它在ActiveMQ的阿蒂米斯

回答

1

阿帕奇的ActiveMQ阿蒂米斯支持“大型”,这将消息通过网络流(使用Netty TCP)。这包括在the documentation。注意:此功能仅适用于“核心”客户端。它不适用于STOMP或OpenWire。它也不支持“恢复”功能,即在断开连接的情况下,消息传送将停止。

我的建议是将消息以较小的块发送到单个消息中,在网络缓慢或断开的情况下更容易处理。消息可以与关联ID或其他信息一起分组,然后最终客户端可以收到消息片段,并在收到全部消息后将其组装在一起。