Apache 在风暴喷口中共享阻塞队列

Apache 在风暴喷口中共享阻塞队列,apache,apache-storm,Apache,Apache Storm,我正在编写一个大数据应用程序,其中两个线程同时运行。线程A从网络接收数据,并将其作为JSONOBJECT放入BlockingQueue中。线程B,一个风暴喷口,然后从阻塞队列中读取并处理它们 我将BlockingQueue对象传递给类构造函数中的spout类。我发现的问题是喷口中的阻塞队列是空的。您能告诉我如何解决这个问题吗?您可以通过运行一些类来启动storm应用程序,该类将拓扑构建并配置为一组对象,然后将该对象集合(连同jar文件)提交给Nimbus服务器。其中一些对象是作为拓扑提交的一部分

我正在编写一个大数据应用程序,其中两个线程同时运行。线程A从网络接收数据,并将其作为JSONOBJECT放入BlockingQueue中。线程B,一个风暴喷口,然后从阻塞队列中读取并处理它们


我将BlockingQueue对象传递给类构造函数中的spout类。我发现的问题是喷口中的阻塞队列是空的。您能告诉我如何解决这个问题吗?

您可以通过运行一些类来启动storm应用程序,该类将拓扑构建并配置为一组对象,然后将该对象集合(连同jar文件)提交给Nimbus服务器。其中一些对象是作为拓扑提交的一部分序列化的喷口和螺栓的实例。集群上螺栓和喷嘴的每个实例都是这些反序列化对象之一。因此,所有螺栓和喷嘴都是在首次启动拓扑(通常在边缘节点上)时构造的,而不是在集群上

这对您来说意味着,在类初始化和对象构造期间,喷口引用的任何对象都将与喷口实例一起序列化。这将包括阻塞队列。您的BlockingQueue正在被序列化并分发到集群,听起来它似乎无法在旅途中幸存下来

您要做的是在构造函数中保留阻塞队列变量null,而在open()方法中设置该变量。创建实际队列对象时,可以将其存储在某个位置的公共静态变量中,以便spout的open()方法可以使用它