如何从Windows上运行的JADE平台向运行Raspberry pi(树莓派)的另一个JADE平台发送ACLMessage?

时间:2020-03-06 16:55:43

标签: java raspberry-pi raspbian agents-jade

我正在尝试在分布式网络上安装多代理系统(Windows计算机和安装了Raspbian OS的Raspberry pi)。我使用以下命令在Windows上启动我的Jade平台:

customfield_data_id

我还使用以下命令在Raspbian上启动我的Jade平台:

custom_field_data

这是两台计算机上的Starter.java:

java mylibrary jade.Boot -gui -platfrom-id Platform1 -agents starter:Starter 

此外,这是我的窗口中的mtpaddress:java mylibrary jade.Boot -gui -platform-id Raspy1 -agents starter:Starter,这也是我的树莓派中的mtpaddress:import jade.core.Agent; import jade.core.behaviours.CyclicBehaviour; import jade.lang.acl.ACLMessage; import java.util.Arrays; public class Starter extends Agent { @Override protected void setup() { System.out.println("Setup of starter agent"); addBehaviour(new ReceiveBehaviour()); } private class ReceiveBehaviour extends CyclicBehaviour { @Override public void action() { ACLMessage msg = myAgent.receive(); if (msg != null) { System.out.println(msg.getContent()); System.out.println(Arrays.toString(msg.getSender().getAddressesArray())); ACLMessage reply = msg.createReply(); reply.setContent("I got it. Thank you " + msg.getSender().getName()); myAgent.send(reply); } else { block(); } } } }

我的两台计算机都使用wifi连接到本地网络(无线调制解调器)。

现在发生的是,我在两台计算机上都启动了平台,在Windows上启动了DummyAgent,然后尝试向raspbian平台发送消息。因此,我添加了一个接收器,并将名称和地址添加为图片

以下: http://192.168.1.6:7778/acc

这是控制台输出:

http://raspy1:7778/acc

我可以从树莓派上的DummyAgent发送消息到我的Windows平台,但是不会发生相反的情况。我该怎么办?

1 个答案:

答案 0 :(得分:0)

在分布式智能网格环境中,我们广泛地在不同机器(Win,Linux,Mac)之间使用JADE通信。

为了允许我们的代理之间进行通信,我们建立了一个名为CEA(中央执行代理的缩写)的中央代理,该代理为代理之间的通信中介提供服务。例如。他拥有并维护着中央电话簿。所有代理商都在此CEA代理商处注册。反过来,CEA代理可以提供已知应用程序代理的确切地址。

要在CEA上注册,代理商需要知道其地址。该地址包含代理名称,平台名称,CEA的MTP-URL和MTP端口。在下面的示例中,如果我们在不同的计算机上,则将发现如何配置AID。

 public AID getAID(){

    String ceaName = this.getAgentName();
    String platformName = this.getPlatformName();
    String mtpProtocol = this.getMtpType();
    String mtpUrl = this.getUrlOrIp();
    int mtpPort = this.getMtpPort();

    String ceaGUID = ceaName + "@" + platformName;
    String ceaMTPAddress = mtpProtocol.toLowerCase() + "://" + mtpUrl + ":" + mtpPort + "/acc";

    AID aid = new AID(ceaGUID, true);
    aid.addAddresses(ceaMTPAddress);
    return aid;
}

因此,最重要的是,与本地ACLMessages(在同一平台上的代理之间发送)相比,您需要将远程JADE平台的MTP信息添加到AID。我不确定JADE可视化/ UI是否能够做到这一点。

关于R'Pi的所示MTP地址,我怀疑URL http://raspy1:7778/acc是否可以在本地网络中解析(除非您运行的DNS可以转换“ raspy1”)。最好您使用特定的MTP设置来启动两个平台,以便使用IP地址代替名称(请参阅《 JADE管理员指南》)。