Lee*_*iam 2 rabbitmq spring-amqp spring-rabbitmq
我在Spring AMQP上使用RabbitMQ
使用该消息将花费> = 200 * 8秒,这超过了我的心跳间隔。从/sf/answers/2965457981/
如果节点之间的消息传输时间(60秒?)>节点之间的心跳时间,将导致群集断开连接并松动消息
更新:
发布自己的答案后,我还收到了另一个答案和评论。感谢您的反馈。只是为了澄清,我不使用AMQP进行文件传输。实际上,数据是在JSON消息中,一些简单而又小,但有些包含复杂的信息,包括一些手绘图。除了在Data Center中保存数据外,我们还通过AMQP在分支级别保存消息副本,以防无法连接到Data Center的情况。
因此,这里的实际问题更为根本,它们是:(1)通过AMQP执行大型文件传输是否合适,以及(2)心跳有什么作用?
心跳
首先,让我们解决心跳问题。正如RabbitMQ文档明确指出的那样,心跳的目的是“确保应用程序层迅速发现中断的连接”。
这样做的原因是简单的。在普通的AMQP用法中,连续消息到达之间可能有几秒钟甚至几分钟。在没有通过TCP会话交换数据的情况下,许多防火墙和其他网络设备会自动关闭端口,以降低暴露于企业网络的风险。心跳进一步有助于减轻TCP的一个基本弱点,即检测到断开连接的困难。网络遇到故障,TCP并不总是能够自行检测到故障。
因此,这里的底线是,当您传输大型邮件时,连接处于活动状态,并且心跳功能没有任何用处,并可能导致麻烦。在这种情况下,最好将其关闭。
AMQP用于移动大文件吗?
第二个问题,我相信更重要的问题是,应该如何处理大文件。为了回答这个问题,让我们首先考虑一个消息队列的作用:发送消息-少量的数据,它们将某种东西传达给另一个计算机系统。这里的有效词很小。消息通常包含以下三项之一:1.命令(执行某项操作),2.事件(发生某件事),3.请求(给我一些数据)和4.响应(这是您的数据))。关于这些的完整讨论超出了范围,但可以说,这些通常都可以由小于100kB的小消息组成。
确实,RabbitMQ的AMQP协议是一个相当健谈的协议。它要求将大型消息分为不超过131kB的多个段。这会给大型文件传输增加大量开销,尤其是与其他文件传输机制(例如FTP)相比时。其次,在使消息在队列中可用之前,消息必须由代理完全处理,并且在完成此操作时,它将占用代理上的宝贵资源。首先,由于其体系结构,整个消息必须适合代理的RAM。该解决方案可能适用于一个客户和一个经纪人,但是在尝试扩展时会很快中断。
最后,在传输文件时通常需要压缩-HTTP自动支持gzip压缩。AMQP没有。在面向消息的应用程序中,发送包含指向较大数据文件的资源定位符(例如URL)的消息非常普遍,然后可以通过适当的方式对其进行访问。
这个故事的主旨
正如谚语所说:“对于用锤子敲打的人,一切看上去都像钉子。” AMQP不是一把锤子,而是一把精密手术刀。它具有非常特定的目的,并且在该目的内适用范围很窄。将其用于除其预期用途以外的其他用途将导致稳定性和可靠性问题,无论您要设计的是什么,以及对最终产品的总体不满意。
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |