我正在我的项目中为多代理平台开发jade。
我有一个主容器和一个包含代理的代理容器。
我想将数据从代理发送到代理容器或主容器..
因为我的代理是客户端,而我的主容器将是服务器。
在 Jade 架构中,我理解代理容器将包含代理。
这可能吗?
我想知道是否有 API 可以在代理之间发送数据。
提前致谢
最佳答案
我不确定您想要实现什么目标。您从 JADE 代理发送的 ACLMessage 的最终收件人是谁?是驻留在目标容器中的所有代理吗?
需要澄清的是,容器本质上是代理可以驻留的地址,它本身并不是可以发布和接收消息的实体。在 JADE 框架内,代理具有 ACLMessages 的“收件箱”,基本上是一个包含收到消息列表的 BlockingQueue 对象。代理能够观察自己的列表并在其生命周期进行时处理它们。容器不具备这种能力。
可以通过添加收件人和其他详细信息将 ACL 消息定向到特定代理。接收消息的代理可以利用 MessageTemplate
监听特定的 ACLMessage,您可以根据匹配条件从代理的“收件箱”中专门选择消息,例如:
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 代理注册的所有可用代理的列表。祝你好运,如果有任何问题请发帖:)
关于java - Jade Java代理通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38119553/