使用案例:需要通过队列从一台服务器向另一台服务器发送一个巨大的文件(100 MB的倍数)。
目前,我使用Activemq Artemis服务器在输入流的帮助下通过tcp协议发送大文件作为ByteMessage,重新尝试间隔为-1,用于无限次故障转移重试。这里的主要问题是消费者端点连接将大部分不稳定因为移动性而断开网络连接。
因此,当在队列中发送文件时,如果连接被丢弃并且重新连接代理应该从事务中断的地方恢复(例如),同时将300mb的文件传输到消费者队列,假设将100mb的一部分传输到消费者队列服务器,那么一段时间后连接被丢弃并重新连接,然后进程应该从剩余的200 mb继续传输,而不是再次传输整个300mb。
我的问题是哪一个是最好的协议(tcp,Stomp和openwire)和最佳实践(blobmessage,bytemessage输入流)来实现它在Activemq Artemis
Apache ActiveMQ Artemis支持“大”消息,这些消息将通过网络流式传输(使用Netty TCP)。这在the documentation中有所涉及。注意:此功能仅适用于“核心”客户端。它不适用于STOMP或OpenWire。它也不支持“恢复”功能,其中消息传输将在断开连接的情况下从中断处继续。
我的建议是在单个消息中以较小的块发送消息,在网络缓慢或断开连接的情况下更容易处理。消息可以与相关ID或其他内容组合在一起,然后终端客户端可以获取消息的各个部分,并在收到消息后将它们组合在一起。