这是上下文:我正在从一个代理(比如说“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 的循环行为似乎总是收到“空”消息(又名“无消息”)。
我使用 Jade Console 的 Sniffer 和 Introspector 工具进行调查。
- 嗅探器显示消息有效地从 senderAgent 发送到 targetAgent。
- Introspector 甚至显示消息在发送方发送并在目标方接收。
内容没问题,AID 没问题,为什么 targetAgent 的循环接收行为总是抓不到任何东西呢?
我感到很失落,因为这是我第一次遇到这个问题,并且我之前成功地在我系统的其他代理之间实现了类似的通信......
任何帮助、调试提示或想法将不胜感激!