我在我的项目中为多代理平台的jade工作。
我有一个主容器和一个包含代理的代理容器。
我想将数据从代理发送到代理容器或主容器。
因为我的代理是一个客户端,我的主容器将是一个服务器。
在jade架构中,我了解到代理容器将包含代理。
这有可能吗?
我想知道有没有在代理之间发送数据的apis。
提前感谢
发布于 2016-09-01 20:17:17
我不确定你想要实现的是什么。您从JADE代理发送的ACLMessage的最终接收者是谁?是驻留在目标容器中的所有代理吗?
为了澄清,容器本质上是代理可以驻留的地址,它本身并不是一个可以发送和接收消息的实体。在JADE框架中,代理为ACLMessages提供了一个“收件箱”,基本上是一个包含已接收消息列表的BlockingQueue对象。代理能够观察它自己的列表,并在其生命周期进行时将其视为列表。容器不具备此功能。
通过添加接收方和其他详细信息,ACLMessages可以针对特定的代理。接收消息的代理可以通过利用MessageTemplate侦听特定的ACLMessages,您可以根据匹配条件从代理的“收件箱”中专门选择消息,例如:
Messagetemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
ACLMessage msg = myAgent.receive(mt);将允许代理从其“收件箱”中获取下一条ACLMessage.INFORM消息。
要获得更多的能力,我建议您通过jade 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代理的所有可用代理的列表。如果你有任何问题,祝你好运并发帖:)
https://stackoverflow.com/questions/38119553
复制相似问题