在JAVA中通过不可靠的网络发送消息

时间:2014-03-19 21:52:51

标签: java sockets activemq netty

我需要通过移动计算机在无线网络上发送连续的消息流(带有时间戳和x / y坐标的简单TextMessages)。将会有很多这些短消息(例如每秒200个),不幸的是网络连接很可能不可靠,因为发送设备会不时地离开WLAN区域......当连接不可用时,所有即将发送的消息应该缓冲,直到连接再次恢复。传输消息的顺序无关紧要,因为它们包含时间戳,但必须传输所有消息。

发送这些电报的简单但可靠的方法是什么?是否可以使用" plain" TCP或UDP套接字连接?当连接暂时关闭并自动发送后,是否会缓冲消息?或者直接检测和报告连接丢失,因此我可以缓冲消息并尝试自己定期重新连接?像Netty这样的图书馆在这里有帮助吗?

我还考虑过使用代理来代理通信(例如ActiveMQ经纪人网络)作为替代方案。这里的开销太大了吗?!在这种情况下,您会建议另一个消息传递中间件吗?

2 个答案:

答案 0 :(得分:0)

TCP保证传送(当它连接时) - 您应该检查连接是否断开并在重试连接时将消息放入队列中。一旦它看到连接被备份,就将队列转储到TCP套接字中。

另请参阅TCP Keepalive以识别向下连接:http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html

答案 1 :(得分:0)

似乎您可以使用“Assured persistent”可靠性模式使用Java JMS之类的消息包装器。我自己并没有在短信的背景下这样做,但这个想法可能会引导你找到正确的答案。此外,可能已经编写了一个Apache库,可以处理您需要的内容,例如Qpid