Skip to content

EventBus Service

Can work as a standalone service, but may be replaced by a facade to an existing eventbus/mq manager.

Configuration

This module has a configuration file (eventbus.yaml by default) that describes the host, port, ssl_context, and trusted_authorities to use. It can also enable insecure logins.

Default service limits can also be overridden in this configuration file.

If no configuration file is found it will default to the following values:

apiVersion: opentestfactory.org/v1alpha1
kind: EventBusConfig
current-context: default
contexts:
- context:
    port: 38368
    host: 127.0.0.1
    ssl_context: adhoc
    enable_insecure_login: false
    max_publication_attempts: 2
    max_publication_threads: 4
  name: default

ssl_context is either adhoc, a list of two items (certificate file path and private key file path), or disabled (not recommended, will switch to plain HTTP).

A context can also contain a trusted_authorities, which is a list of public key files, used for token validation.

A context can also allow for insecure (token-less) logins if enable_insecure_login is set to true (by default, insecure logins are disabled).

Insecure logins, if enabled, are only allowed from a given address (127.0.0.1 by default). This can be overridden by specifying insecure_bind_address.

EventBus limits

All those limits must be integers. If the entry is missing, the default value will be assumed.

max_publication_attempts limits the number of attempts the eventbus makes to send a publication to a subscriber. If not specified, defaults to 2.

The eventbus only attempts to re-send a publication to a subscriber if the previous attempt failed. Please note that if the subscriber returned a 4xx or 5xx error code it is not considered a failure.

max_publication_threads limits the number of simultaneous publication threads. If not specified, defaults to 4.

Each publication received by the eventbus is dispatched to the relevant subscribers in its own thread. Increasing this number means more publications can be dispatched in parallel.

If all publication threads are in use, the pending publications are queued and will be dispatched when publication threads become available.

Usage

python3 -m opentf.core.eventbus [--context context] [--config configfile]

Endpoints

This module exposes three endpoints:

  • /subscriptions (GET, POST)
  • /subscriptions/{uuid} (DELETE)
  • /publications (POST)

Whenever calling those endpoints, a signed token must be specified via the Authorization header.

This header will be of the form:

Authorization: Bearer xxxxxxxx

It must be signed by one of the trusted authorities specified in the current context.

On successful subscription, a subscription ID is returned (in .details.uuid).

On successful publication, the publication is dispatched to all corresponding subscriptions, asynchronously.

If there is no corresponding subscription, the response code will be 200, but its message part will be:

'Publication received, but no matching subscription'

If there are corresponding subscriptions, the publication will be posted to their endpoints. There will be a X-Subscription-ID header containing the subscription ID:

X-Subscription-ID: uuid

There will also be a X-Publication-ID header containing the publication ID, to help disambiguate duplicates:

X-Publication-ID: uuid