Skip to content

[TT-14447] Add AMQP 0.9 docs #6548

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 28 commits into
base: master
Choose a base branch
from
Open

Conversation

buraksezer
Copy link
Contributor

@buraksezer buraksezer commented Jun 17, 2025

User description

PR for https://tyktech.atlassian.net/browse/TT-14447


PR Type

Documentation


Description

  • Add comprehensive documentation for amqp_0_9 input configuration

  • Add detailed documentation for amqp_0_9 output configuration

  • Document all configuration fields, TLS options, and metadata usage

  • Provide YAML configuration examples for both input and output


Changes walkthrough 📝

Relevant files
Documentation
stream-config.md
Add detailed AMQP 0.9 input/output documentation and configuration
examples

tyk-docs/content/api-management/stream-config.md

  • Added a new section documenting the amqp_0_9 input, including all
    config fields, metadata, and usage examples.
  • Added a new section documenting the amqp_0_9 output, with all config
    fields, metadata handling, and YAML examples.
  • Included detailed explanations for TLS, queue/exchange declaration,
    and message property settings.
  • Provided field-by-field breakdowns and sample configurations for both
    input and output.
  • +736/-0 

    Need help?
  • Type /help how to ... in the comments thread for any questions about PR-Agent usage.
  • Check out the documentation for more information.
  • Copy link
    Contributor

    ⚠️ Deploy preview for PR #6548 did not become live after 3 attempts.
    Please check Netlify or try manually: Preview URL

    Copy link
    Contributor

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 No relevant tests
    🔒 Security concerns

    Sensitive information exposure:
    The documentation describes configuration fields that may contain sensitive data (e.g., private keys, passwords, root certificates). While there are warnings and TODOs for linking to a secrets management page, ensure that users are clearly warned not to store secrets directly in configuration files and that secure handling practices are documented and linked.

    ⚡ Recommended focus areas for review

    Sensitive Information Handling

    Several fields (such as root_cas, tls.client_certs[].key, and tls.client_certs[].password) are documented as containing sensitive information, but the documentation only references a TODO for linking to the secrets page. Ensure that the documentation clearly instructs users not to store secrets directly in configuration files and that the referenced secrets documentation is available and linked.

    <!-- TODO add secrets link :::warning Secret
    This field contains sensitive information that usually shouldn't be added to a config directly, read our [secrets page for more info](/docs/configuration/secrets).
    ::: -->
    
    Type: `string`
    Default: `""`
    
    ```yaml
    # Examples
    
    root_cas: |-
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
    tls.root_cas_file

    An optional path of a root certificate authority file to use. This is a file, often with a .pem extension, containing
    a certificate chain from the parent trusted root certificate, to possible intermediate signing certificates, to the host
    certificate.

    Type: string
    Default: ""

    # Examples
    
    root_cas_file: ./root_cas.pem
    tls.client_certs

    A list of client certificates to use. For each certificate either the fields cert and key, or cert_file and key_file should be specified,
    but not both.

    Type: array
    Default: []

    # Examples
    
    client_certs:
      - cert: foo
        key: bar
    
    client_certs:
      - cert_file: ./example.pem
        key_file: ./example.key
    tls.client_certs[].cert

    A plain text certificate to use.

    Type: string
    Default: ""

    tls.client_certs[].key

    A plain text certificate key to use.

    Type: string
    Default: ""

    tls.client_certs[].cert_file

    The path of a certificate to use.

    Type: string
    Default: ""

    tls.client_certs[].key_file

    The path of a certificate key to use.

    Type: string
    Default: ""

    tls.client_certs[].password

    A plain text password for when the private key is password encrypted in PKCS#1 or PKCS#8 format. The obsolete pbeWithMD5AndDES-CBC algorithm is not
    supported for the PKCS#8 format. Warning: Since it does not authenticate the ciphertext, it is vulnerable to padding oracle attacks that can let an
    attacker recover the plaintext.

    
    </details>
    
    <details><summary><a href='https://github.com/TykTechnologies/tyk-docs/pull/6548/files#diff-94556bfc041d6a47a54fae7e3b925b1aa6824dc87a668489a97f7c4df4f87baeR4301-R4700'><strong>Consistency and Clarity</strong></a>
    
    There are minor inconsistencies in the output documentation, such as a repeated sentence in the introduction and some field descriptions that could be clarified (e.g., the difference between `type` and `exchange_declare.type`). Review for clarity and consistency to ensure users can easily understand and apply the configuration.
    </summary>
    
    ```markdown
    
    Sends messages to an AMQP (0.91) exchange. AMQP is a messaging protocol used by various message brokers, 
    including RabbitMQ.Connects to an AMQP (0.91) queue. AMQP is a messaging protocol used by various message brokers, 
    including RabbitMQ.
    
    #### Common
    
    ```yaml
    # Common config fields, showing default values
    output:
      label: ""
      amqp_0_9:
        urls: [] # No default (required)
        exchange: "" # No default (required)
        key: ""
        type: ""
        metadata:
          exclude_prefixes: []
        max_in_flight: 64
    

    Advanced

    # All config fields, showing default values
    output:
      label: ""
      amqp_0_9:
        urls: [] # No default (required)
        exchange: "" # No default (required)
        exchange_declare:
          enabled: false
          type: direct
          durable: true
        key: ""
        type: ""
        content_type: application/octet-stream
        content_encoding: ""
        correlation_id: ""
        reply_to: ""
        expiration: ""
        message_id: ""
        user_id: ""
        app_id: ""
        metadata:
          exclude_prefixes: []
        priority: ""
        max_in_flight: 64
        persistent: false
        mandatory: false
        immediate: false
        timeout: ""
        tls:
          enabled: false
          skip_cert_verify: false
          enable_renegotiation: false
          root_cas: ""
          root_cas_file: ""
          client_certs: []

    Metadata

    The metadata from each message is delivered as headers.

    It's possible for this output type to create the target exchange by setting exchange_declare.enabled to true, if the exchange
    already exists then the declaration passively verifies that the settings match.

    TLS is automatic when connecting to an amqps URL, but custom settings can be enabled in the tls section.

    The fields key, exchange and type can be dynamically set using function interpolations described here.

    Fields

    urls

    A list of URLs to connect to. The first URL to successfully establish a connection will be used until the connection is closed.
    If an item of the list contains commas, it will be expanded into multiple URLs.

    Type: array

    # Examples
    
    urls:
      - amqp://guest:guest@127.0.0.1:5672/
    
    urls:
      - amqp://127.0.0.1:5672/,amqp://127.0.0.2:5672/
    
    urls:
      - amqp://127.0.0.1:5672/
      - amqp://127.0.0.2:5672/
    exchange

    An AMQP exchange to publish to. This field supports interpolation functions.

    Type: string

    exchange_declare

    Optionally declare the target exchange (passive).

    Type: object

    exchange_declare.enabled

    Whether to declare the exchange.

    Type: bool
    Default: false

    exchange_declare.type

    The type of the exchange.

    Type: string
    Default: "direct"
    Options: direct, fanout, topic, x-custom

    exchange_declare.durable

    Whether the exchange should be durable.

    Type: bool
    Default: true

    key

    The binding key to set for each message. This field supports interpolation functions.

    Type: string
    Default: ""

    type

    The type property to set for each message. This field supports interpolation functions.

    Type: string
    Default: ""

    content_type

    The content type attribute to set for each message. This field supports interpolation functions.

    Type: string
    Default: application/octet-stream

    content_encoding

    The content encoding attribute to set for each message. This field supports interpolation functions.

    Type: string
    Default: ""

    correlation_id

    Set the correlation ID of each message with a dynamic interpolated expression. This field supports interpolation functions.

    Type: string
    Default: ""

    reply_to

    Carries response queue name - set with a dynamic interpolated expression. This field supports interpolation functions.

    Type: string
    Default: ""

    expiration

    Set the per-message TTL. This field supports interpolation functions.

    Type: string
    Default: ""

    message_id

    Set the message ID of each message with a dynamic interpolated expression. This field supports interpolation functions.

    Type: string
    Default: ""

    user_id

    Set the user ID to the name of the publisher. If this property is set by a publisher, its value must be equal to the name
    of the user used to open the connection. This field supports interpolation functions.

    Type: string
    Default: ""

    app_id

    Set the application ID of each message with a dynamic interpolated expression. This field supports interpolation functions.

    Type: string
    Default: ""

    metadata

    Specify criteria for which metadata values are attached to messages as headers.

    Type: object

    metadata.exclude_prefixes

    Provide a list of explicit metadata key prefixes to be excluded when adding metadata to sent messages.

    Type: array
    Default: []

    priority

    Set the priority of each message with a dynamic interpolated expression. This field supports interpolation functions.

    Type: string
    Default: ""

    # Examples
    
    priority: "0"
    
    priority: ${! metadata("amqp_priority") }
    
    priority: ${! json("doc.priority") }
    max_in_flight

    The maximum number of messages to have in flight at a given time. Increase this to improve throughput.

    Type: int
    Default: 64

    persistent

    Whether message delivery should be persistent (transient by default).

    Type: bool
    Default: false

    mandatory

    Whether to set the mandatory flag on published messages. When set if a published message is routed to zero queues, it is returned.

    Type: bool
    Default: false

    immediate

    Whether to set the immediate flag on published messages. When set if there are no ready consumers of a queue, then the message is dropped instead of waiting.

    Type: bool
    Default: false

    timeout

    The maximum period to wait before abandoning it and reattempting. If not set, wait indefinitely.

    Type: string
    Default: ""

    tls

    Custom TLS settings can be used to override system defaults.

    Type: object

    tls.enabled

    Whether custom TLS settings are enabled.

    Type: bool
    Default: false

    tls.skip_cert_verify

    Whether to skip server side certificate verification.

    Type: bool
    Default: false

    tls.enable_renegotiation

    Whether to allow the remote server to repeatedly request renegotiation. Enable this option if you're getting the error message
    local error: tls: no renegotiation.

    Type: bool
    Default: false

    tls.root_cas

    An optional root certificate authority to use. This is a string, representing a certificate chain from the parent trusted root certificate,
    to possible intermediate signing certificates, to the host certificate.

    Type: string
    Default: ""

    # Examples
    
    root_cas: |-
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
    tls.root_cas_file

    An optional path of a root certificate authority file to use. This is a file, often with a .pem extension, containing
    a certificate chain from the parent trusted root certificate, to possible intermediate signing certificates, to the host
    certificate.

    Type: string
    Default: ""

    # Examples
    
    root_cas_file: ./root_cas.pem
    tls.client_certs

    A list of client certificates to use. For each certificate either the fields cert and key, or cert_file and key_file should be specified,
    but not both.

    Type: array
    Default: []

    # Examples
    
    client_certs:
      - cert: foo
        key: bar
    
    client_certs:
      - cert_file: ./example.pem
        key_file: ./example.key
    tls.client_certs[].cert

    A plain text certificate to use.

    Type: string
    Default: ""

    tls.client_certs[].key

    A plain text certificate key to use.

    Type: string
    Default: ""

    tls.client_certs[].cert_file

    The path of a certificate to use.

    Type: string
    Default: ""

    tls.client_certs[].key_file

    The path of a certificate key to use.

    Type: string
    Default: ""

    tls.client_certs[].password

    A plain text password for when the private key is password encrypted in PKCS#1 or PKCS#8 format. The obsolete pbeWithMD5AndDES-CBC algorithm is not
    supported for the PKCS#8 format. Warning: Since it does not authenticate the ciphertext, it is vulnerable to padding oracle attacks that can let an
    attacker recover the plaintext.

    Type: string
    Default: ""

    # Examples
    
    password: foo

    Processors

    
    </details>
    
    </td></tr>
    </table>
    

    Copy link
    Contributor

    PR Code Suggestions ✨

    No code suggestions found for the PR.

    Copy link

    netlify bot commented Jun 17, 2025

    PS. Add to the end of url /docs/nightly

    Name Link
    🔨 Latest commit 6439d12
    🔍 Latest deploy log https://app.netlify.com/projects/tyk-docs/deploys/68517300b48aa50008dff6fc
    😎 Deploy Preview https://deploy-preview-6548--tyk-docs.netlify.app
    📱 Preview on mobile
    Toggle QR Code...

    QR Code

    Use your smartphone camera to open QR code link.

    To edit notification comments on pull requests, go to your Netlify project configuration.

    Copy link

    netlify bot commented Jun 17, 2025

    PS. Add to the end of url /docs/nightly

    Name Link
    🔨 Latest commit f64ceb4
    🔍 Latest deploy log https://app.netlify.com/projects/tyk-docs/deploys/6867d50d99bae20008696105
    😎 Deploy Preview https://deploy-preview-6548--tyk-docs.netlify.app
    📱 Preview on mobile
    Toggle QR Code...

    QR Code

    Use your smartphone camera to open QR code link.

    To edit notification comments on pull requests, go to your Netlify project configuration.

    Copy link
    Contributor

    @sharadregoti sharadregoti left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Please fix the CI and specify the release labels. I guess this is meant for 5.9.0

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    3 participants