目前,风暴喷口有一个开放的方法来配置他们和螺栓有一个准备方法。有没有办法让所有的喷口示例等待螺栓上所有的准备方法,听他们说完?
我有一个例子,我想传递一些配置信息的螺栓在飞行中(因为这个配置信息改变了所有的时间)。我在一些地方读到过,我们应该使用zookeeper或redis之类的内存键值存储来实现这一点。不过,我担心的是,如果螺栓还没有准备好处理来自喷口的数据,喷口开始发出元组,会发生什么?有没有办法让喷口等待螺栓的更新,说他们准备好了?
目前,风暴喷口有一个开放的方法来配置他们和螺栓有一个准备方法。有没有办法让所有的喷口示例等待螺栓上所有的准备方法,听他们说完?
我有一个例子,我想传递一些配置信息的螺栓在飞行中(因为这个配置信息改变了所有的时间)。我在一些地方读到过,我们应该使用zookeeper或redis之类的内存键值存储来实现这一点。不过,我担心的是,如果螺栓还没有准备好处理来自喷口的数据,喷口开始发出元组,会发生什么?有没有办法让喷口等待螺栓的更新,说他们准备好了?
3条答案
按热度按时间voase2hg1#
是的,您可以使用redis存储配置,然后从
prepare
方法。这个
prepare
方法由工作进程调用,工作进程在完成后开始处理元组。实际上,我认为在工作进程的所有组件就绪之前,不会发出元组。http://nathanmarz.github.io/storm/doc-0.8.1/index.html最后,您可以有一个额外的喷口来查找配置更改。然后,如果有新的配置可用,它将通过命名流发送给您的螺栓。
wfveoks02#
你不用担心这个。风暴框架在喷口前加载螺栓。风暴以相反的顺序加载螺栓。在拓扑中间的螺栓之前加载拓扑末端的螺栓,最后加载喷口。
vmjh9lq93#
我找到了一个更优雅的解决方案。问题是某些bolt需要配置信息来处理传入的元组。我发现了storm重放元组的能力,所以现在我的螺栓会从一个喷口监听更新,从另一个喷口监听元组。只要我没有收到更新,我就会不断失败元组,并让喷口在一段可配置的时间后重放它们。