Вот контекст: я отправляю сообщение от одного агента (скажем, «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 никогда ничего не перехватывает?
Я чувствую себя совершенно потерянным, так как у меня впервые возникла эта проблема, и я успешно реализовал аналогичную связь между другими агентами моей системы...
Будем очень признательны за любую помощь, советы по отладке или идеи!