@notification.notification_sample('myobject-update.json')
@object_base.NovaObjectRegistry.register.register_notification
class MyObjectNotification(notification.NotificationBase):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'payload': fields.ObjectField('MyObjectUpdatePayload')
}
@object_base.NovaObjectRegistry.register.register_notification
class MyObjectUpdatePayload(notification.NotificationPayloadBase):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'some_data': fields.StringField(),
'another_data': fields.StringField(),
}
versioned notification 本质上是versioned object的一个延伸。
一个versioned notification对象包括几个重要元素:
注: priorty, event_type, publisher_id, payload在定义的时候也继承于各项目versioned object的基类,故本质上他们也是versioned object。
notification_samples, 是项目文档目录中定义的一组json格式的notification消息样例,如下面的Nova删除虚拟机的样例,与api_samples类似。
消息载体pyaload,与versioned object中对应的资源定义类似,例如instance object的定义。包含了instance的各个属性定义(字段类型,是否允许空值)。准确的来说,其中每一个字段都是对象类型的定义,只不过有些字段是一些简单类型,例如string类型,int类型,有一些字段需要根据需要自己定义类型,如下面json样例中嵌套的flavor定义,flavor本身也是一个object的定义。 payload的定义中,除了对象自身的属性字段的定义,还需包括以下几个重要字段(见附1):
versioned_notifications作为消息队列的topic,和老的unversioned notification不同,这里使用了一个新的topic的消息队列,也就是通常会有versioned_notifications.info 和versioned_notifications.error两个消息队列。
附1: 代码示例:
附2: Nova删除虚拟机完成实例