2016-06-30 3 views
0

저는 프로젝트에서 여러 에이전트 플랫폼 용 옥으로 작업하고 있습니다.옥 Java 에이전트 통신

저는 주 에이전트와 에이전트를 포함하는 에이전트 컨테이너가 있습니다. 내가 에이전트 컨테이너 또는 주요 컨테이너에 에이전트로부터 데이터를 보낼

..

내 에이전트가 클라이언트이고 내 주요 컨테이너가 서버가 될 것입니다.

옥의 아키텍처에서 저는 에이전트 컨테이너가 에이전트를 포함 할 것이라는 것을 이해했습니다.

그럴 수 있습니까?

요원간에 데이터를 전송할 api가 있는지 궁금합니다.

미리 감사드립니다.

답변

0

나는 당신이 달성하고자하는 것이 무엇인지 잘 모릅니다. 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 

: 여기 당신이 시작하는 몇 가지 코드입니다. 문제가 있으면 행운과 게시 :)