开发cloudify配方文件- Attributes API
2013-04-10 00:00
267 查看
The Attributes API
服务实例有时需要共享一些信息,例如一个服务实例可能给其他服务实例分享它的监控端口(运行时)
Cloudify提供通过Attributes API实现这种机制,属性可以被分配到应用、服务或服务实例的上下文中,一旦被分配,这些属性可以被这个应用下的服务实例读取和修改
下面的例子表明,myKey-myValue这对属性在服务实例启动后被分配到应用中,另外其他服务的otherKey 属性被读取
gistfile1.groovy
The API 的语法
下面是对分配属性值到应用、服务和服务实例的语法:
context.attributes.thisInstance.myKey = "myValue"—分配myValue到myKey 属性到当前服务实例的上下文中,也可以这样写: context.attributes.thisInstance["myKey"] = "myValue"
context.attributes.thisService.myKey = "myValue"—分配myValue到myKey 属性到当前服务的上下文中,注意:只有每个服务上下文中只能有一个myKey 属性。 因此,无论在那个服务实例修改这个属性都会覆盖这个值。
context.attributes.thisApplication.myKey = "myValue—分配myValue到myKey 属性到当前应用的上下文中,注意: 整个应用上下文中只能有一个myKey属性。因此,无论在那个服务实例修改这个属性都会覆盖这个值。
一个服务实例可以读取或修改其他服务实例或服务的属性,需要指定具体的服务名而不能使用thisService,例如:
context.attributes.tomcat.myKey = "myValue"—分配myValue到myKey 属性到tomcat服务的上下文中
context.attributes.tomcat.instances[1].myKey = "myValue"—分配myValue到myKey 属性到tomcat的ID为1的服务实例上下文中,注意:服务实例的ID是从1开始的。
不能访问其他应用的属性,只针对当前应用的服务和服务实例。
下面的例子是使用each 方法来遍历服务实例的所有属性:
context.attributes.thisService.instances.each{println it.myKey}
读写属性
属性可以使用Service Context API的ServiceContextFactory 类来获取
在当前服务中获取myKey属性,例:
retrieveAttributes.groovy
读写应用和服务的属性,例:
readWriteAttr1.groovy
读写当前服务实例和其他服务实例的属性,例:
wRInstanceAttrs.groovy
服务实例有时需要共享一些信息,例如一个服务实例可能给其他服务实例分享它的监控端口(运行时)
Cloudify提供通过Attributes API实现这种机制,属性可以被分配到应用、服务或服务实例的上下文中,一旦被分配,这些属性可以被这个应用下的服务实例读取和修改
下面的例子表明,myKey-myValue这对属性在服务实例启动后被分配到应用中,另外其他服务的otherKey 属性被读取
gistfile1.groovy
service{ name "myService" lifecycle { postStart { context.attributes.thisInstance.myKey = "myValue" println context.attributes.otherService.otherKey } } |
下面是对分配属性值到应用、服务和服务实例的语法:
context.attributes.thisInstance.myKey = "myValue"—分配myValue到myKey 属性到当前服务实例的上下文中,也可以这样写: context.attributes.thisInstance["myKey"] = "myValue"
context.attributes.thisService.myKey = "myValue"—分配myValue到myKey 属性到当前服务的上下文中,注意:只有每个服务上下文中只能有一个myKey 属性。 因此,无论在那个服务实例修改这个属性都会覆盖这个值。
context.attributes.thisApplication.myKey = "myValue—分配myValue到myKey 属性到当前应用的上下文中,注意: 整个应用上下文中只能有一个myKey属性。因此,无论在那个服务实例修改这个属性都会覆盖这个值。
一个服务实例可以读取或修改其他服务实例或服务的属性,需要指定具体的服务名而不能使用thisService,例如:
context.attributes.tomcat.myKey = "myValue"—分配myValue到myKey 属性到tomcat服务的上下文中
context.attributes.tomcat.instances[1].myKey = "myValue"—分配myValue到myKey 属性到tomcat的ID为1的服务实例上下文中,注意:服务实例的ID是从1开始的。
不能访问其他应用的属性,只针对当前应用的服务和服务实例。
下面的例子是使用each 方法来遍历服务实例的所有属性:
context.attributes.thisService.instances.each{println it.myKey}
读写属性
属性可以使用Service Context API的ServiceContextFactory 类来获取
在当前服务中获取myKey属性,例:
retrieveAttributes.groovy
import org.cloudifysource.dsl.context.ServiceContextFactory; def context = com.gigaspaces.cloudify.dsl.context.ServiceContextFactory.getServiceContext() context.attributes.thisService["myKey"]; |
readWriteAttr1.groovy
//set the value of an application level attribute context.attributes.thisApplication["myKey"] = "myValue" //read an application level attribute def appAttribute = context.attributes.thisApplication["myKey"] //set the value of a service level attribute context.attributes.thisService["myKey"] = "myValue" //read a service level attribute from current service def serviceAttribute = context.attributes.thisService["myKey"] //to read an attribute of a different service use the service name in this example cassandra def cassandraAttribute = context.attributes.cassandra["port"] |
wRInstanceAttrs.groovy
//Writing an attribute at the service instance level context.attributes.thisInstance["myKey"] = "myValue" //Reading an attribute(in this case port) from instance #1 in the same cluster context.attributes.thisService.instances[1].port = 4000 //Reading an attribute(in this case jmxPort) from instance #1 of the tomcat service context.attributes.tomcat.instances[1].jmxPort = 1099 //Instances are iterable, so you can do iterable stuff of groovy on top of it. context.attributes.tomcat.instances.each{println it.key} |
相关文章推荐
- 开发cloudify配方文件-两种应用伸缩方式
- 开发cloudify配方文件- 服务等级SLA
- 开发cloudify配方文件- Web Management Console
- 开发cloudify配方文件-自定义命令
- 开发cloudify配方文件-剖析配方文件
- 开发cloudify配方文件-配方的继承
- Android开发笔记(三十二)文件基础操作
- iOS开发网络篇之文件下载、大文件下载、断点下载
- ios开发证书,描述文件,bundle ID的关系
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- Android文件管理器开发中对文件的复制,移动,删除,新建文件夹等的操作
- iOS开发2:读取plist文件
- iOS开发中JSON文件的加载
- 用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
- 【转】Asp.NET大文件上传组件开发总结(六)---大文件上传组件使用说明
- j2me(javame)开发找不到MIDlet类。请检查jad文件或用—MIDLET参数指定解决方案
- PHP移动互联网开发笔记(6)——文件的上传下载
- Linux应用程序开发笔记->文件编程之库函数
- 【转】Android开发之SD卡上文件操作
- Windows Phone开发之App文件讲解