나는 당신이 달성하고자하는 것이 무엇인지 잘 모릅니다. JADE 에이전트에서 보내고있는 ACL 메시지의 최종 복제본은 누구입니까? 대상 컨테이너에있는 모든 에이전트입니까?
명확히하기 위해 컨테이너는 본질적으로 에이전트가 상주 할 수있는 주소이며 메시지를 게시하고 수신 할 수있는 자체의 권한이 아닙니다. JADE 프레임 워크 내에서 에이전트는 기본적으로 수신 메시지 목록을 포함하는 BlockingQueue 객체 인 ACLMessages에 대한 'Inbox'기능을 제공합니다. 에이전트는 자체 목록을 관찰하고 수명주기가 진행될 때이를 처리 할 수 있습니다. 컨테이너에는이 기능이 없습니다.
수신자 및 기타 세부 정보를 추가하여 특정 상담원에게 ACL 메시지를 보낼 수 있습니다. 예를 들어 당신이 구체적으로 일치 기준에 따라 에이전트의 '받은 편지함'의 메시지를 선택할 수있는 MessageTemplate
을 이용하여 특정 ACLMessages을 수신 할 수있는 메시지를 잡하는 에이전트 :
Messagetemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage msg = myAgent.receive(mt);
는 에이전트가 걸릴 수 있습니다 its'inbox '에서 다음 ACLMessage.INFORM 메시지.
더 많은 능력을 원한다면, 옥을 통과하는 것이 좋습니다 API.
또한, 나는 당신이 컨테이너 내의 모든 에이전트에게 메시지를 보내는 것을 달성하려고 노력한다고 믿습니다. AMS 에이전트에 플랫폼에있는 에이전트 목록을 쿼리 한 다음 ContainerID
으로 필터링 할 수 있습니다. 이 코드는 AMS 에이전트에 등록 된 플랫폼에서 사용 가능한 모든 에이전트의 목록을 검색합니다
AMSAgentDescription[] agents = null;
SearchConstraints sc = new SearchConstraints();
// if multiple searchs are done, isolate them based on the name of searching agent
sc.setSearchId(getAID().getName());
sc.setMaxResults(new Long(-1)); // long value of -1 means get all agents
agents = AMSService.search(this, new AMSAgentDescription(), sc); //Query AMS agent for available agents
: 여기 당신이 시작하는 몇 가지 코드입니다. 문제가 있으면 행운과 게시 :)