2017-08-04 81 views
0

我有一個原消息我有兩個Message Listener正在偵聽相同的消息。如何確保一個偵聽器先於另一個偵聽器執行其代碼?

Item.proto:

Message SetItemThing { 
     required string id; 
    } 

CreateTableListener:

public void onMessage(SetItemThing msg) { 
    // Creates a table to put items in 
} 

CreateItemInTableListener:

public void onMessage(SetItemThing msg) { 
    // Puts item in a table that is going to be created 
} 

我想確保CreateTableListener的功能之前運行CreateItemInTableListener。由於他們得到相同的消息,我想知道是否有辦法強制CreateTableListener先運行?

如果沒有,什麼是得到我想要的期望的功能的最佳方式? 我想只是讓另一個消息,併發送一個不同的時間,但我即使我做到了,我想在我的應用程序,所以我仍然可以得到沒有CreateTableListener先走了同樣的問題的啓動階段,以發送這些消息。

回答

0

創建的包裝。第一個接收器接收包裝器,並檢查包裝器包含的內容。如果它包含創建表操作,則執行。如果它包含了創建物品的操作,它只會觸發解包並將其解除。第二個偵聽器僅偵聽第二個操作。 akka框架使用了一些類似的概念。它有一個主管活動和兒童活動。如果孩子能執行任務,它執行,如果它不知道如何處理它返回它回到主管的消息。然後主管將它發送到下一個活動。最終,一個知道如何處理它的人會處理它。

0

我不明白爲什麼一個消息應該觸發數據庫表創建事件,但無論如何。

如果你想異步消息來觸發一系列動作,先通過第1步的郵件,然後將它傳遞到第2步。你可以通過創建另一個隊列,只有第2步會聽。

相關問題