RabbitMQ binding spec

Detailed documentation on the RabbitMQ binding component

Component format

To setup RabbitMQ binding create a component of type bindings.rabbitmq. See this guide on how to create and apply a binding configuration.

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: <NAME>
  5. spec:
  6. type: bindings.rabbitmq
  7. version: v1
  8. metadata:
  9. - name: queueName
  10. value: "queue1"
  11. - name: host
  12. value: "amqp://[username][:password]@host.domain[:port]"
  13. - name: durable
  14. value: "true"
  15. - name: deleteWhenUnused
  16. value: "false"
  17. - name: ttlInSeconds
  18. value: "60"
  19. - name: prefetchCount
  20. value: "0"
  21. - name: exclusive
  22. value: "false"
  23. - name: maxPriority
  24. value: "5"
  25. - name: contentType
  26. value: "text/plain"
  27. - name: reconnectWaitInSeconds
  28. value: "5"
  29. - name: externalSasl
  30. value: "false"
  31. - name: caCert
  32. value: "null"
  33. - name: clientCert
  34. value: "null"
  35. - name: clientKey
  36. value: "null"
  37. - name: direction
  38. value: "input, output"

Warning

The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described here.

Spec metadata fields

When a new RabbitMQ message gets published, all values from the associated metadata are added to the message’s header values.

FieldRequiredBinding supportDetailsExample
queueNameYInput/OutputThe RabbitMQ queue name“myqueue”
hostYInput/OutputThe RabbitMQ host address“amqp://[username][:password]@host.domain[:port]” or with TLS: “amqps://[username][:password]@host.domain[:port]”
durableNOutputTells RabbitMQ to persist message in storage. Defaults to “false”“true”, “false”
deleteWhenUnusedNInput/OutputEnables or disables auto-delete. Defaults to “false”“true”, “false”
ttlInSecondsNOutputSet the default message time to live at RabbitMQ queue level. If this parameter is omitted, messages won’t expire, continuing to exist on the queue until processed. See also60
prefetchCountNInputSet the Channel Prefetch Setting (QoS). If this parameter is omiited, QoS would set value to 0 as no limit0
exclusiveNInput/OutputDetermines whether the topic will be an exclusive topic or not. Defaults to “false”“true”, “false”
maxPriorityNInput/OutputParameter to set the priority queue. If this parameter is omitted, queue will be created as a general queue instead of a priority queue. Value between 1 and 255. See also“1”, “10”
contentTypeNInput/OutputThe content type of the message. Defaults to “text/plain”.“text/plain”, “application/cloudevent+json” and so on
reconnectWaitInSecondsNInput/OutputRepresents the duration in seconds that the client should wait before attempting to reconnect to the server after a disconnection occurs. Defaults to “5”.“5”, “10”
externalSaslNInput/OutputWith TLS, should the username be taken from an additional field (e.g. CN.) See RabbitMQ Authentication Mechanisms. Defaults to “false”.“true”, “false”
caCertNInput/OutputThe CA certificate to use for TLS connection. Defaults to null.“——-BEGIN CERTIFICATE——-\nMI…”
clientCertNInput/OutputThe client certificate to use for TLS connection. Defaults to null.“——-BEGIN CERTIFICATE——-\nMI…”
clientKeyNInput/OutputThe client key to use for TLS connection. Defaults to null.“——-BEGIN PRIVATE KEY——-\nMI…”
directionNInput/OutputThe direction of the binding.“input”, “output”, “input, output”

Binding support

This component supports both input and output binding interfaces.

This component supports output binding with the following operations:

  • create

Specifying a TTL per message

Time to live can be defined on queue level (as illustrated above) or at the message level. The value defined at message level overwrites any value set at queue level.

To set time to live at message level use the metadata section in the request body during the binding invocation.

The field name is ttlInSeconds.

Example:

  1. curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \
  2. -H "Content-Type: application/json" \
  3. -d "{
  4. \"data\": {
  5. \"message\": \"Hi\"
  6. },
  7. \"metadata\": {
  8. \"ttlInSeconds\": "60"
  9. },
  10. \"operation\": \"create\"
  11. }"
  1. curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \
  2. -H "Content-Type: application/json" \
  3. -d '{
  4. "data": {
  5. "message": "Hi"
  6. },
  7. "metadata": {
  8. "ttlInSeconds": "60"
  9. },
  10. "operation": "create"
  11. }'

Specifying a priority per message

Priority can be defined at the message level. If maxPriority parameter is set, high priority messages will have priority over other low priority messages.

To set priority at message level use the metadata section in the request body during the binding invocation.

The field name is priority.

Example:

  1. curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \
  2. -H "Content-Type: application/json" \
  3. -d "{
  4. \"data\": {
  5. \"message\": \"Hi\"
  6. },
  7. \"metadata\": {
  8. "priority": \"5\"
  9. },
  10. \"operation\": \"create\"
  11. }"
  1. curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \
  2. -H "Content-Type: application/json" \
  3. -d '{
  4. "data": {
  5. "message": "Hi"
  6. },
  7. "metadata": {
  8. "priority": "5"
  9. },
  10. "operation": "create"
  11. }'