2017-08-04 45 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步会听。

相关问题