首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JADE 多機 Agent 通信實戰:防火牆配置與 AID 完整地址避坑指南

     編輯:Java 相關知識

JADE 實現跨機器 Agent 通信,必須解決兩大基礎設施問題:**防火牆端口開放**與 **AID 地址完整性**。

基礎設施準備

  1. 防火牆開放文件/打印機共享協議(NetBIOS over TCP/IP:137/138/139/445 端口),保證機器名解析正常
  2. 確保雙向網絡連通,ping 主機名 可解析 IP

AID 構建黃金法則

AID 必須包含:

  • 完整名稱:name@host:port/JADE 格式(如 ams@gjpc:1099/JADE)
  • 合法 Addresses:至少一個 HTTP/IIOP 地址(如 https://gjpc:7778/acc)

完整發送端代碼模板

public class SenderAgent extends Agent {
    protected void setup() {
        AID remoteAMS = new AID("ams@remote-host:1099/JADE");
        remoteAMS.addAddresses("https://remote-host:7778/acc"); // 關鍵!

        try {
            SearchConstraints sc = new SearchConstraints();
            sc.setMaxResults(new Long(-1));
            AMSAgentDescription[] agents = AMSService.search(this, remoteAMS, new AMSAgentDescription(), sc);

            ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
            msg.setContent("Hello from " + getLocalName());

            for (AMSAgentDescription desc : agents) {
                AID receiver = desc.getName();
                if (receiver.equals(getAID())) continue; // 跳過自己
                receiver.addAddresses("https://remote-host:7778/acc"); // 接收端也需完整地址!
                msg.addReceiver(receiver);
            }
            send(msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

常見失敗場景排查

現象根因解決
搜索遠程 AMS 失敗防火牆阻擋 1099/7778 端口開放端口或配置隧道
消息發送無響應Receiver AID 缺少 addAddresses雙向補全 Addresses
主機名解析失敗DNS/hosts 未配置配置 hosts 或使用 IP 直連

最佳實踐建議

  • 生產環境建議使用固定 IP 而非主機名構建 AID
  • 封裝 createRemoteAID(host, port, name) 工具方法統一構建
  • 啟動參數 -Djava.rmi.server.hostname=實際IP 解決 RMI 綁定問題
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved