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