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