我正在使用JADE Java Agent Dev'平台,我在等待特定的时候遇到了接收消息的问题。
我有一个有两种行为的代理人 第一种行为是接收来自其他代理的消息。 第二个实现代理逻辑。如下
action1 ...
send message to an agent
wait for reply // this is blocking
action2 ...
等待回复部分确实等待来自目标代理的结果,该结果在没有其他代理干扰向该代理发送消息时满足。
问题在于此代理由于操作方法策略而等待回复(将其ReceiverBehavior)置于保持状态。 如果它收到回复,一切都很好。但是,如果同时向此代理发送了一条消息,则收到的数据是错误的,action2部分不再有效。事实上,ReceiverBehavior应该接收其他代理消息的这种干扰。
我在考虑在发送消息后保留行为。因此,终止“action”方法让ReceiverBehavior接收新消息,当收到相关消息时,它将通知该行为并让它恢复。但是,它应该从action2恢复执行。
我希望我能够清楚地解释这个问题。 非常感谢。
答案 0 :(得分:0)
如果我对你不好,你应该使用MessageTemplate来接收合适的回复。
MessageTemplate mt = ...
ACLMessage aclMessage = myAgent.receive(mt);
if(aclMessage == null){
block(TIMEOUT);
} else {
...
}