我试图理解在元组处理超时的情况下拓扑的状态(不是在三叉戟模式下),让我们假设在某个bolt中处理元组的过程中达到了超时阈值。在这种情况下,spout再次发出初始元组(我所理解的消息id相同)。现在让我们假设Bolt完成对元组的处理,并发出和acks该元组。在这种情况下:
1:是的,失败的元组继续。这样做的原因是,试图阻止失败的元组继续运行的代价太大,因为喷口需要告诉所有螺栓关于失败的信息。
2:我想这里有一个小小的误会。当spout发出元组时,消息id不是Storm用来在内部跟踪该元组dag/tree的。相反,spout执行器生成一个随机id(称为rootid
),并在本地存储rootid->messageid
的映射。消息id不会离开spout执行器,也不会传播到bolt。
当spout执行器继续发送元组时,它包括rootid
。rootid
是acker和bolts用来标识元组树的东西。
为了清楚起见,我将上面的内容简化了一些,为了处理向多个螺栓发射的喷口,还涉及另一组随机ID(anchorid
)。从概念上讲,你可以认为
spout -> bolt1
-> bolt2
就像处理拓扑一样
spout -> splitterBolt -> bolt1
-> bolt2
3:假设您的元组超时了。spout执行程序被告知rootid
已失败。发生这种情况时,spout执行程序调用spout.fail(msgId)
,然后删除rootid->messageid
映射中的映射。
问题内容: 我在gunicorn + nginx上运行django。我在上传文件时遇到了问题。实际上,上传工作正常,但gunicorn超时,因此在nginx中造成了这种情况: 如果刷新页面,可以看到所有照片都已上传。问题在于,这会导致超时,从而给人留下无法上传的印象。 这是我的gunicorn conf: 我尝试更改超时,但是没有用。 问题答案: 你可以尝试通过添加以下内容来升级Nginx中的代理
我在两个线程中使用一个SocketChannel,一个线程用于发送数据,另一个线程用于接收数据。 线程1:使用上述socketchannel写入数据 线程2:使用相同的socketchannel读取数据 我没有在socketchannel中使用任何选择器,因为我需要写和读是异步的(使用两个不同的线程) 问题:当连接丢失时,socketchannel。write()和socketchannel。re
osx和Win的文档中写道:“对于TCP套接字,返回值0表示对等方关闭了连接的一半。” 2)阻塞套接字的问题:在阻塞套接字上,我希望SO_RCVTIMEO和SO_SNDTIMEO有一个默认值,比如30秒(用getsockopt检查)。但是为什么它们被设置为0?
问题内容: 我有一个Web应用程序,它充当运行非常长任务的非现场服务器的接口。用户输入信息并点击提交,然后chrome等待响应,并在接收到新页面时加载它。但是,根据网络和用户的输入,任务可能会花费相当长的时间,并且在返回数据之前(尽管任务仍在运行),chrome有时会加载“无数据接收页”。 有没有办法在我的任务正在思考时放置一个临时页面,或者只是强制chrome继续等待?提前致谢 问题答案: 尽管
有什么想法吗? 谢谢
我有一个用两个螺栓处理文档的拓扑结构。我需要能够在文档被完全处理/通过整个拓扑结构后修改存储在喷口中的数据结构。在进一步了解ApacheStorm之前,我相信在spout中实现的“ack”方法只在拓扑的末尾被调用。我现在明白了,在每一个插销中都需要调用“ack”,我感到困惑。 本质上,如果我把自定义代码放在spout中的ack方法中:什么时候执行?每当'ack'方法被调用在一个螺栓或当整个元组树已