2017-02-02 33 views
1

我正在編寫一個大數據應用程序,其中兩個線程同時運行。線程A從網絡接收數據,並將它們作爲JSONOBJECT放在BlockingQueue中。線程B,一個風暴噴口,然後從BlockingQueue中讀取並處理它們。在暴風雨噴口共享一個BlockingQueue

我將BlockingQueue對象傳遞給類構造函數中的spout類。我發現的問題是,噴嘴中的BlockingQueue是空的。你能不能讓我知道我該如何解決這個問題?

回答

1

可以通過運行一些類,構建和配置拓撲一組對象,然後提交對象的該集合(與jar文件一起)雨雲服務器啓動風暴應用。其中一些對象是作爲拓撲提交的一部分序列化的噴口和螺栓的實例。羣集上的螺栓和噴口的每個實例都是這些反序列化的對象之一。因此,當您首次啓動拓撲時(通常在邊緣節點上)而不是在羣集上構建所有螺栓和噴口。

這對你意味着什麼是類的初始化和對象的建設期間由壺嘴引用的任何對象都與噴口實例一起序列化。這將包括BlockingQueue。您的BlockingQueue正在序列化並分發到集羣,聽起來好像它沒有幸存下來。

你想要做什麼是離開阻塞隊列變空的構造函數,而是設置變量的open()方法。當你創建實際的隊列對象時,你可以將它存儲在某個公共的靜態變量中,以便它可以被噴嘴的open()方法使用。

相關問題