JADE学习【4】

Agent搜索:黄页服务

黄页服务允许Agent发布它提高那个的一个或多个功能,以便其他Agent可以方便地发现和使用它们。

任何Agent够可以注册(发布)服务和搜索(发现)服务,在Agent声明周期内部都可以进行登记、注销、修改和搜索服务。

JADE提供jade.domain.DFService类,通过调用一系列方法实现发布和搜索服务。

抽象对象为DFAgentDescription类、ServiceDescription类、和Property类

为了发布一个服务,Agent必须建立一个适当地描述(作为DFAgentDescription类的实例),然后调用DFService类的register()静态方法。

DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
dfd.setName(getAID());
sd.setType(...);
sd.setName(...);
dfd.addServices(sd);
DFService.register(this,dfd);

当终止一个Agent的时候,应当同时注销其提供的服务:

protected void takeDown()
{
	try{
	DFService.deregister(this);
	}catch(FIPAException fe){
		fe.printStackTrace();
	}
}

Agent需要执行搜索服务时,必须向DF提供一个模板描述。搜索的结果是所有与模板描述匹配的服务列表。如果模板中给定的参数与服务描述中对应的参数值相同,认为该服务描述与模板匹配。

DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType(....);
template.addServices(sd);
DFAgentDescription[] result = DFService.search(myAgent,template)

从一个外部Java应用启动JADE

JADE运行由jade.core.Runtime类实现。根据单独模式,这个类的一个实例存在于一个JVM中,可以通过instance()静态方法搜索。单个Runtime实例提供了两种方法:createMainContainer()用于创建一个JADE主容器;createAgentContainer()用于创建一个JADE外围容器。这两种方法都需要一个Profile文件对象作为参数,配置JADE开始运行时所需的参数选项(主容器的主机名和端口号)。用命令行启动JADE需要设定的所有参数项在Profile类中作为常量使用,并且通过调用setParameter(String key,String value)函数在配置文件中设置。

createMainContainer()函数和createAgentContainer()函数都返回一个jade.wrapper.ContainerController对象。ContainerController类的creatNewAgent()函数返回一个AgentController对象。createNewAgent()方法创建Agent实例,但不启动它,调用返回的AgentController对象的start()方法才是启动Agent的唯一途径。

public AgentController startBuyerAgent(String host,String port,String name){
    //jade环境主容器 host
    
    //jade环境主容器端口port
    
    Runtime rt = Runtime.instance();
    Profile p = new ProfileImpl();
    p.setParameter(Profile.MAIN_HOST,host);
    p.setParameter(Profile.MAIN_PORT,port);
    ContainerController cc = runtime.createAgentContainer(p);
    if(cc!= null){
        try{
            AgentController ac = WBcc.createNewAgent(name,"bookTrading.buyer.BookBuyerAgent",null);
            ac.start();
            return ac;
        }
        catch(Exception e){
            e.printStackTrace();
        }
        
        
    }
    return null;
    
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值