다음은 컨텍스트입니다. 한 상담원 ("senderAgent"라고합시다)에서 다른 ("targetAgent")로 메시지를 보내고 있습니다. 여기서는 아무 것도 복잡하지 않거나 그렇게 보입니다. 메시지 전파 유형이 INFORM입니다.들어오는 메시지를 수신하지 않는 순환 동작
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();
다음
은 (원샷 동작 내부) 관련 senderAgent 부분에 대한 코드입니다
문제점 :이 메시지는 targetAgent에 의해 절대 포착되지 않습니다. 내 senderAgent에 의해 실제로 전송되지만 targetAgent의 주기적 동작은 항상 "null"메시지 (일명 "no message")를 얻는 것처럼 보입니다.
제이드 콘솔의 Sniffer 및 Introspector 도구를 사용하여 조사했습니다.
- Sniffer는 메시지가 senderAgent에서 targetAgent로 효과적으로 전송됨을 보여줍니다.
- Introspector는 메시지가 발신 측에서 보내지고 대상 측에서 수신되었음을 보여줍니다.
내용은 괜찮습니다. AID는 문제가 없으므로 왜 targetAgent의 주기적 수신 동작이 아무 것도 잡지 못합니다.
나는 이것이 나의 처음이 문제를 가지고 같이 아주 잃고 나는 성공적으로 내 시스템의 다른 에이전트 사이에 전에 유사한 통신을 구현 느낄...
어떤 도움, 디버그 조언, 아이디어는 크게 감사하겠습니다!
matchSender를 나가면? –
어느 쪽도 작동하지 않는다, 나는 수신기 측에 전체 MessageTemplate를 제거하고 아직도 아무것도 얻지 않았다. 하지만 그 해결책을 찾았습니다! 아래에 게시했습니다. –