這裏是上下文:我從一個代理(比如說「senderAgent」)向另一個(「targetAgent」)發送消息:沒有什麼複雜的,或者看起來很複雜。 消息傳播類型是INFORM。循環行爲沒有捕獲傳入的消息
下面是相關senderAgent部分的代碼(內一次性行爲):
message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("targetAgent", AID.ISLOCALNAME));
message.setContent(jsonContent); // not important here
send(message);
而對於相關targetAgent部分的代碼(內循環的行爲):
MessageTemplate mt =
MessageTemplate.and(MessageTemplate.MatchPerformative(ACLMessage.INFORM),
MessageTemplate.MatchSender("senderAgent", AID.ISLOCALNAME));
ACLMessage msg = receive(mt);
if (msg != null) {
//do something
}
block();
問題是:此消息永遠不會被targetAgent捕獲。它確實是由我的senderAgent發送的,但targetAgent的循環行爲似乎總是得到「null」消息(又名「無消息」)。
我使用Jade Console的Sniffer和Introspector工具進行調查。
- 嗅探器顯示消息從senderAgent有效地發送到targetAgent。
- Introspector甚至顯示消息在發送方發送並在目標端接收。
內容是正常的,AIDs是正常的,那麼爲什麼targetAgent的週期性接收行爲從來沒有捕捉到任何東西?
我覺得很迷失,因爲這是我有這個問題第一次和我之前成功地實施我的系統的其他代理之間的類似通信...
任何幫助,調試技巧或想法,將不勝感激!
如果你離開matchSender出? –
也不工作,我擺脫了接收端的整個MessageTemplate,仍然沒有。但我找到了解決方案!在下面發表。 –