で
おかげで私はそれはあなたが達成しようとしていることが何であるかを確認していません。あなたがJADEエージェントから送信しているACLMessageの最終的な再現者は誰ですか?ターゲットコンテナに常駐するすべてのエージェントですか?
明確にするために、コンテナは本質的にエージェントが常駐できるアドレスです。メッセージを送信したり受信したりすることはできません。 JADEフレームワーク内では、エージェントはACLMessagesの「受信ボックス」、基本的に受信したメッセージのリストを含むBlockingQueueオブジェクトを備えています。エージェントは自身のリストを観察し、ライフサイクルが進むにつれてそのリストを処理することができます。コンテナにはこの機能がありません。
ACLMessagesは、受信者とその他の詳細を追加することによって、特定のエージェントに誘導できます。メッセージが供給されたエージェントは、たとえば、あなたが特に一致基準に基づいて、エージェントの「受信ボックス」からメッセージを選択することができMessageTemplate
を利用することにより、特定のACLMessagesのために聞くことができます。
Messagetemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage msg = myAgent.receive(mt);
は、エージェントが取ることができるようになります次のACLMessage.INFORMメッセージを'inbox 'から削除します。
さらなる能力のために、私はあなたが翡翠APIを通過することをお勧めします。
また、あなたが達成しようとしているのは、コンテナ内のすべてのエージェントにメッセージを送信することです。 AMSエージェントにプラットフォーム上のエージェントのリストを照会してから、ContainerID
でフィルタリングすることができます。
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
このコードは、AMSエージェントに登録されているすべての利用可能なエージェントのリストを取得します。問題がある場合は幸運と投稿をしてください:)