Jade Java Agent Communication

时间:2016-06-30 09:49:14

标签: java agent agents-jade

我正在我的项目中为多个代理平台工作。

我有一个主容器和代理容器,其中包含代理。

我想将数据从代理发送到代理容器或主容器..

由于我的代理是客户端,而我的主容器将是服务器。

在玉器架构中,我理解代理容器将包含代理。

这可能吗?

我想知道在代理商之间发送数据有api。

提前致谢

1 个答案:

答案 0 :(得分:1)

我不确定你想要实现的是什么。谁是您从JADE代理发送的ACLMessage的最终接收者?它是所有驻留在目标容器中的代理吗?

只是为了澄清,容器本质上是代理可以驻留的地址,它本身并不是可以发布和接收消息的权利。在JADE框架内,代理商具有“收件箱”功能。对于ACLMessages,基本上是一个包含接收消息列表的BlockingQueue对象。代理能够观察自己的列表并将其视为生命周期的进展。容器不具备此功能。

可以通过添加收件人和其他详细信息将ACLMessages定向到特定代理。正在接收消息的代理可以使用MessageTemplate来监听特定的ACLMessage,您可以在其中专门选择来自代理的收件箱的消息'基于匹配标准,例如:

Messagetemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage msg = myAgent.receive(mt);

将允许代理从其“收件箱”中获取下一个ACLMessage.INFORM消息。

对于更多的能力,我建议你通过玉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代理注册的平台上所有可用代理的列表。祝你好运,如果你有任何问题可以发帖:)