Skip to main content
Version: 1.4.0

Using a9s Messaging

This chapter describes how to interact with a9s Messaging using the Kubernetes API.

Pre-requisite

  • kubectl

  • Data Service Custom Resources

    Before using the a9s Messaging service, ensure the necessary custom resources are present in your Kubernetes cluster. Use the following commands to verify their existence:

    kubectl get messaginginstances.anynines.com

    kubectl get servicebindings.anynines.com

    kubectl get backups.anynines.com

    kubectl get restores.anynines.com

    If you encounter the following error:

    error: the server doesn't have a resource type "<resource-name>"

    This indicates that the corresponding resource is missing. To resolve this, you can follow the instructions here or reach out to a platform operator for assistance.

Create a Messaging Service Instance

To provision a Messaging Service Instance, simply create a Messaging Kubernetes Object by applying a Service Instance Claim.

Replace the placeholder values denoted by < > in the provided yaml file. Kindly select one of the supported values for spec.service and spec.plan. The supported values for service and plan can be found here.

Optional: To set up a clustered Messaging with small specifications, apply the yaml manifest provided in the Example tab below. Feel free to modify the fields in order to create a different type of Messaging database tailored to your requirements.

  apiVersion: anynines.com/v1
kind: MessagingInstance
metadata:
name: <name>
namespace: <namespace>
spec:
service: <service-name>
plan: <plan-name>
compositionRef:
name: a9s-messaging

Applying this Kubernetes yaml manifest is as straightforward as working with any default Kubernetes resource.

kubectl apply -f <filename.yaml>

After applying the manifest, please allow some time for the remote resources to be deployed. If you've deployed the provided example, you should observe an output similar to the following:

kubectl get messaginginstances.anynines.com
NAME                          SYNCED   READY   CONNECTION-SECRET   AGE
example-a9s-messaging True True 9m

You can also obtain additional information about the status of Messaging Objects using the following command:

kubectl describe messaginginstances.anynines.com
Name:         example-a9s-messaging
Namespace: default
...
Status:
Conditions:
Last Transition Time: 2023-08-07T09:57:49Z
Reason: ReconcileSuccess
Status: True
Type: Synced
Last Transition Time: 2023-08-07T10:04:11Z
Reason: Available
Status: True
Type: Ready
Managed:
Conditions:
Last Transition Time: 2023-08-07T09:57:50Z
Reason: ReconcileSuccess
Status: True
Type: Synced
Last Transition Time: 2023-08-07T10:04:00Z
Reason: Available
Status: True
Type: Ready
Created At: 2023-08-07T09:57:50.556Z
Provisioned At: 2023-08-07T10:03:40.445Z
State: provisioned
Updated At: 2023-08-07T10:03:40.500Z
info

No Messaging pod is running locally in the App Cluster.

Behind the scenes the Custom Resources synced up to the a9s Data Service platform which ensures the database is provisioned and healthy. The status information reflecting the database status synced back to the App Cluster to signify service readiness.

Bind an Application to a Messaging Database

The ServiceBinding Custom Resource is all that you need to quickly start using the database. To target a specific Messaging instance, set the spec.instanceRef field.

Optional: If you've followed the example from the previous step, where we create a Messaging Kubernetes Object, you can now proceed to apply the yaml manifest provided in the Example tab below. This will bind the previously created Messaging instance.

  apiVersion: anynines.com/v1
kind: ServiceBinding
metadata:
name: <name>
namespace: <namespace>
spec:
instanceRef: <messaging-instance-name>
serviceInstanceType: messaging
compositionRef:
name: a9s-servicebinding

After a few seconds, the ServiceBinding will be ready. You can then access the credentials and network details required for database connectivity by describing the Secret that was automatically created. The Data Service automation generates a Secret, named {service-binding-name}-creds, in the same namespace as the ServiceBinding.

For instance, if you have already applied the provided examples, upon the successful deployment of the ServiceBinding, you can access credentials and network details by describing the corresponding Kubernetes Secret using the following command:

kubectl get secret example-a9s-messaging-creds -o yaml
apiVersion: v1
data:
http_api_uri: <base64 encoded value>
http_api_uris: <base64 encoded value>
protocols.management.cacrt: <base64 encoded value>
protocols.management.uris: <base64 encoded value>
protocols.management.ssl: <base64 encoded value>
protocols.management.path: <base64 encoded value>
protocols.management.port: <base64 encoded value>
protocols.management.username: <base64 encoded value>
protocols.management.host: <base64 encoded value>
protocols.amqp_ssl.host: <base64 encoded value>
protocols.amqp_ssl.port: <base64 encoded value>
protocols.management.hosts: <base64 encoded value>
protocols.management.password: <base64 encoded value>
protocols.management.uri: <base64 encoded value>
protocols.amqp_ssl.password: <base64 encoded value>
protocols.amqp_ssl.uri: <base64 encoded value>
protocols.amqp_ssl.username: <base64 encoded value>
protocols.amqp_ssl.hosts: <base64 encoded value>
protocols.amqp_ssl.ssl: <base64 encoded value>
...

Please note that the protocols field in the generated Secret encompasses more than just the messaging protocol used. It's a data structure (map) containing essential information for establishing a connection to the a9s Messaging Service instance.

Backup a Messaging Database

The a9s platform provides an easy way to create backups and restore if needed. You can use the Kubernetes Custom Resource Backup from the API group anynines.com to create backups of Data Service Instances. To do this, simply target the specific Data Service Instance you want to back up, as shown in the following yaml manifest:

  apiVersion: anynines.com/v1
kind: Backup
metadata:
name: <name>
namespace: <namespace>
spec:
instanceRef: <messaging-instance-name>
serviceInstanceType: messaging
compositionRef:
name: a9s-backup

And then apply the yaml manifest:

kubectl apply -f <filename.yaml>

You can inspect the status of the backup to determine when it is complete, similar to how we did it for the Messaging instance, using the following command:

kubectl get backup.anynines.com -o yaml

You can observe the status transition from queued to done as the backup process completes.

apiVersion: anynines.com/v1
kind: Backup
...
status:
...
managed:
...
status: queued
apiVersion: anynines.com/v1
kind: Backup
...
status:
...
managed:
...
size: 624
status: done

Restore a Messaging Database Backup

To restore a backup, you must apply a Restore from the API group anynines.com, targeting an existing Messaging Backup. Below is the yaml file you can utilize for this purpose:

  apiVersion: anynines.com/v1
kind: Restore
metadata:
name: <name>
spec:
backupRef: <backup-name>
serviceInstanceType: messaging
compositionRef:
name: a9s-restore

And then apply the yaml manifest:

kubectl apply -f <filename.yaml>

You can observe the state transition from queued to running and done as the restore completes.

kubectl get restore.anynines.com -o yaml
apiVersion: v1
items:
- apiVersion: anynines.com/v1
kind: Restore
...
status:
...
managed:
...
state: queued
apiVersion: v1
items:
- apiVersion: anynines.com/v1
kind: Restore
...
status:
...
managed:
...
state: done

Delete a9s Kubernetes Custom Resources

Delete the Custom Resources using the kubectl delete command. Replace <resource-type> with the actual resource type and <resource-name> with the name of the Custom Resource you want to delete.

kubectl delete <resource-type> <resource-name>

Alternatively, you can use the following command to delete Custom Resources by specifying the filename of the yaml manifest:

kubectl delete -f <filename.yaml>

Coming soon

a9s Messaging offers a range of features that will soon be supported for a9s Messaging through Kubernetes integration. See the following table for a summary of these upcoming features.

FeatureDescription
MetricsMonitor, collect, and manage metrics for comprehensive insights into the service.
LoggingStream log data to a third-party service for centralized log management and analysis.
Disk Usage AlertsCreate disk usage alerts to be notified when ephemeral or persistent disk usage exceeds a certain threshold.
Database ConfigurationConfigure advanced features such as consumer delivery acknowledgment timeouts, TLS protocol version, and cipher suites by defining RabbitMQ configuration parameters.
PluginsUse plugins for advanced message routing and management. For example, hash-based routing, RabbitMQ broker federation, MQTT support, message sharding, inter-instance message movement, STOMP protocol implementation, message flow tracing, and event-based message exchange management.
Service ManagementView service listings, access the RabbitMQ dashboard directly from a web browser, create users with different roles, specify high availability queues, and restart the Data Service.