Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Code Block
public class EventTopic {
    String eventCategory; // describes the category of event subscriber is interested in, which can be 'ActionEvent', 'AlertEvent', 'UsageEvent', 'ResourceStateEvent', 'AsyncJobEvent'
    String eventType;     // describes the type of the event with the event category subscriber is interested in. For e.g for an events of category 'ActionEvent' type could be VM.START, VM.STOP etc
    String resourceType;  // describes the type of the resource for which event generated. E.g.) VirtualMachine, Network, Volume, SnapShot etc.
    String resourceUUID;  // described the UUID of the resource for which event is generated
    String eventSource;  // source of the event, what component of management server generated the events, plug-in which generated event etc
}

 

AMQP based event bus implementation

An AMQP plug-in will be introduced in CloudStack which will implement 'EventBus' interface, that implement semantics to EventBus interface, i.e implement publish, subscribe and unsubscribe function.

publish:

When a event is published on to event bug, with EventBus.Publish, this plug-in shall be push events generated by CloudStack to an exchange in AMQP server. Published event to the exchange in AMQP server shall have below routing key format;

  event-source.event-category.event-type.resource-type.resource-uuid

For e.g for action event generated by management server for VM start operation for VM with UUID '172dd6f8-7d36-44ef-9a03-3b342034aaa4' shall publish event to AMQP exchange with routing key;

management-server.ActionEvent.VM-START.VirtualMachine.172dd6f8-7d36-44ef-9a03-3b342034aaa4

subscribe:

when a component running along management server, subscribes to events by registering event handler with EventBus.SubScribe method, this plugin shall create a queue and bind to the exchange with binding key created from the event topics. Binding key shall of the format:

  event-source.event-category.event-type.resource-type.resource-uuid

Binding key is formed from the event topic details. if details are not provided then plugin will default to wildcard.

e.g.1) if the event topic is specified as "all action events, for the virtual machine with UUID 172dd6f8-7d36-44ef-9a03-3b342034aaa4" then binding key will formed as

          *.ActionEvent.*.VirtualMachine.172dd6f8-7d36-44ef-9a03-3b342034aaa4

 

Subscribing to events externally:


For the components running outside the management server context, can subscribe to events directly with the AMQP server. 

One create queue and bind to the exchange with a binding key formed as per the events interested. Binding key needs to be of the format.

  event-source.event-category.event-type.resource-type.resource-uuid

 

Example binding keys and the interpretation:

 

'*.*.*.*.*' represents a binding key that will subscribe to all the events

'*.*.*.VirtualMachine.*' represents a binding key that will subscribe to all the events related virtual machine

'*.*.*.Network.*' represents a binding key that will subscribe to all the events related virtual machine

'*.ActionEvent.*.*.*' represents a binding key that will subscribe to all the action events