• Русский
  • Поддержка плагинов

    Механизм плагинов

    RabbitMQ поддерживает плагины, которые расширяют функциональность различными способами: поддержка дополнительных протоколов, мониторинг состояния системы, дополнительные типы обменников AMQP 0-9-1, федерация узлов и др. Многие функции реализованы в виде плагинов и поставляются вместе с основными релизами.

    Для получения дополнительной информации обратитесь к: How to use RabbitMQ Plugins.

    Инструкции по эксплуатации

    Просмотр поддерживаемых плагинов в инстансе

    Выберите любой узел RabbitMQ, войдите в Pod и выполните следующую команду для просмотра поддерживаемых и включённых плагинов:

    rabbitmq-plugins list

    По умолчанию при создании инстанса включены плагины rabbitmq_peer_discovery_k8s, rabbitmq_prometheus, rabbitmq_management и связанные с ними плагины.

    Ниже приведён список плагинов, включённых в образ, с их описаниями:

    Название плагинаОписание
    rabbitmq_amqp1_0Плагин для поддержки протокола AMQP 1.0, позволяющий клиентам AMQP 1.0 подключаться к RabbitMQ
    rabbitmq_auth_backend_cacheПлагин для кэширования результатов аутентификации, улучшает производительность аутентификации RabbitMQ и снижает количество запросов к бэкенд-сервисам аутентификации
    rabbitmq_auth_backend_httpПлагин для поддержки HTTP-аутентификации, позволяет проверять пользователей RabbitMQ через HTTP-сервис
    rabbitmq_auth_backend_ldapПлагин для поддержки LDAP-аутентификации, позволяет проверять пользователей RabbitMQ через LDAP-сервис
    rabbitmq_auth_backend_oauth2Плагин для поддержки аутентификации OAuth 2.0, позволяет проверять пользователей RabbitMQ через сервис OAuth 2.0
    rabbitmq_auth_mechanism_sslПлагин для поддержки SSL-аутентификации, позволяет проверять пользователей RabbitMQ с помощью SSL-сертификатов
    rabbitmq_consistent_hash_exchangeПлагин для реализации консистентного хеширования, позволяет создавать специальный обменник, который вычисляет хеш на основе ключей маршрутизации или заголовков сообщений и отправляет сообщения в соответствующие очереди
    rabbitmq_delayed_message_exchangeПлагин для отложенной доставки сообщений, позволяет создавать специальный обменник, который устанавливает задержку на основе заголовков сообщений, временно хранит сообщения в памяти или на диске до истечения задержки, а затем отправляет их в соответствующие очереди
    rabbitmq_event_exchangeПлагин для публикации событий RabbitMQ, позволяет создавать специальный обменник, который отправляет различные события RabbitMQ, такие как создание, удаление и изменение соединений, каналов, очередей, пользователей, разрешений и др., в соответствующие очереди, поддерживает несколько типов событий и фильтрацию
    rabbitmq_federationПлагин для соединения нескольких инстансов RabbitMQ, позволяет создавать федерации, которые пересылают сообщения с одного инстанса RabbitMQ на другой
    rabbitmq_federation_managementПлагин для управления федерацией RabbitMQ, позволяет просматривать и настраивать федерации RabbitMQ через веб-интерфейс
    rabbitmq_jms_topic_exchangeПлагин для поддержки JMS-топиков, позволяет создавать специальный обменник, который маршрутизирует сообщения на основе заголовка JMSDestination сообщений
    rabbitmq_managementПлагин для управления и мониторинга RabbitMQ, предоставляет веб-интерфейс для просмотра статуса, конфигурации, статистики и логов RabbitMQ, а также выполнения некоторых операций
    rabbitmq_management_agentПлагин для поддержки управления RabbitMQ, предоставляет агент, который отправляет различную информацию, такую как использование памяти, диска, соединений, каналов, очередей и др. с узлов RabbitMQ в плагин управления, а также позволяет плагину управления отправлять различные команды узлам RabbitMQ
    rabbitmq_mqttПлагин для поддержки протокола MQTT, позволяет клиентам MQTT подключаться к RabbitMQ, поддерживает различные функции, такие как QoS, сохранённые сообщения, сообщения последней воли, фильтрацию по топикам и др.
    rabbitmq_peer_discovery_awsПлагин для поддержки обнаружения узлов в AWS, автоматически обнаруживает и присоединяет кластеры RabbitMQ в средах AWS, поддерживает различные сервисы AWS
    rabbitmq_peer_discovery_commonПлагин для поддержки общего обнаружения узлов, предоставляет базовые функции, такие как регистрация, снятие с регистрации, запросы узлов и др., может использоваться другими плагинами обнаружения узлов
    rabbitmq_peer_discovery_consulПлагин для поддержки обнаружения узлов через Consul, автоматически обнаруживает и присоединяет кластеры RabbitMQ в средах Consul
    rabbitmq_peer_discovery_etcdПлагин для поддержки обнаружения узлов через etcd, автоматически обнаруживает и присоединяет кластеры RabbitMQ в средах etcd
    rabbitmq_peer_discovery_k8sПлагин для поддержки обнаружения узлов в Kubernetes, позволяет автоматически обнаруживать и присоединять кластеры RabbitMQ в средах Kubernetes
    rabbitmq_prometheusПлагин для поддержки мониторинга Prometheus, позволяет собирать и отображать различные метрики RabbitMQ с помощью Prometheus
    rabbitmq_random_exchangeПлагин для реализации случайной маршрутизации, позволяет создавать специальный обменник, который случайным образом отправляет сообщения в одну или несколько очередей
    rabbitmq_recent_history_exchangeПлагин для реализации маршрутизации по недавней истории, позволяет создавать специальный обменник, который отправляет сообщения в одну или несколько очередей, которые недавно получали сообщения
    rabbitmq_shardingПлагин для реализации шардинга, позволяет создавать специальную очередь, которая распределяет сообщения по нескольким подочередям
    rabbitmq_shovelПлагин для пересылки сообщений, позволяет задавать правила пересылки сообщений из одной очереди или обменника в другой
    rabbitmq_shovel_managementПлагин для управления RabbitMQ shovel, позволяет просматривать и настраивать RabbitMQ shovel через веб-интерфейс
    rabbitmq_stompПлагин для поддержки протокола STOMP, позволяет подключаться к RabbitMQ с помощью клиентов STOMP, поддерживает различные функции
    rabbitmq_streamПлагин для поддержки потоковых протоколов, позволяет создавать специальную очередь для хранения и передачи больших объёмов упорядоченных сообщений
    rabbitmq_stream_managementПлагин для управления потоками RabbitMQ, позволяет просматривать и настраивать потоки RabbitMQ через веб-интерфейс
    rabbitmq_topПлагин для просмотра производительности RabbitMQ, предоставляет интерфейс командной строки для просмотра использования различных ресурсов RabbitMQ
    rabbitmq_tracingПлагин для трассировки сообщений RabbitMQ, может создавать трассы, записывающие содержимое и свойства сообщений RabbitMQ в файлы или логи
    rabbitmq_trust_storeПлагин для управления хранилищем доверия RabbitMQ, позволяет хранить и обновлять SSL-сертификаты в RabbitMQ
    rabbitmq_web_dispatchПлагин для поддержки веб-сервисов RabbitMQ, предоставляет фреймворк для определения и обработки HTTP-запросов внутри RabbitMQ
    rabbitmq_web_mqttПлагин для поддержки MQTT через WebSockets, позволяет подключаться к RabbitMQ с помощью клиентов WebSocket
    rabbitmq_web_mqtt_examplesПлагин для демонстрации MQTT через WebSockets, предоставляет несколько примеров
    rabbitmq_web_stompПлагин для поддержки STOMP через WebSockets, позволяет подключаться к RabbitMQ с помощью клиентов WebSocket
    rabbitmq_web_stomp_examplesПлагин для демонстрации STOMP через WebSockets, предоставляет несколько примеров

    Включение/отключение плагинов, уже включённых в образ

    Если необходимо включить или отключить плагины, уже включённые в образ, можно обновить соответствующие поля в YAML-файле инстанса. Например, для rabbitmq_shovel:

    additionalPlugins:
    - rabbitmq_top
    - rabbitmq_shovel

    Включение сторонних или пользовательских плагинов

    Если необходимо включить пользовательские или сторонние плагины, не включённые в образ, их нельзя просто включить, отредактировав additionalPlugins в YAML. Их нужно предварительно загрузить в контейнер до запуска pod.

    Метод 1: Среда имеет доступ в интернет

    1. Обновите поле spec.override, добавив конфигурацию sts, загружая плагин в initContainer.
    2. Обновите поле spec.rabbitmq.envConfig, добавив переменные окружения для настройки пути к плагинам.
    3. Обновите поле spec.rabbitmq.additionalPlugins для включения плагина.
    4. После готовности инстанса выполните команду rabbitmq-plugins list для проверки включения плагина.

    Пример YAML приведён ниже:

    apiVersion: rabbitmq.com/v1beta1
    kind: RabbitmqCluster
    metadata:
      name: test
      labels:
        prometheus.io/port: "15692"
        prometheus.io/scrape: "true"
    spec:
      version: 3.12.4
      replicas: 3
      resources:
        requests:
          cpu: "1"
          memory: 2Gi
        limits:
          cpu: "1"
          memory: 2Gi
      service:
        type: NodePort
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchLabels:
                  app.kubernetes.io/name: test
              topologyKey: kubernetes.io/hostname
      rabbitmq:
        additionalPlugins:
          - rabbitmq_management_exchange
        envConfig: |
          RABBITMQ_PLUGINS_DIR=/opt/rabbitmq/plugins:/opt/rabbitmq/community-plugins
      override:
        statefulSet:
          spec:
            template:
              spec:
                containers:
                  - name: rabbitmq
                    volumeMounts:
                      - mountPath: /opt/rabbitmq/community-plugins
                        name: community-plugins
                volumes:
                  - name: community-plugins
                    emptyDir: {}
                initContainers:
                  - command:
                      - sh
                      - -c
                      - curl -L -v https://github.com/rabbitmq/rabbitmq-management-exchange/releases/download/v3.12.0/rabbitmq_management_exchange-3.12.0.ez --output /community-plugins/rabbitmq_management_exchange-3.12.0.ez
                    image: curlimages/curl  # or other image with curl command
                    imagePullPolicy: IfNotPresent
                    name: copy-community-plugins
                    resources:
                      limits:
                        cpu: 100m
                        memory: 500Mi
                      requests:
                        cpu: 100m
                        memory: 500Mi
                    terminationMessagePolicy: FallbackToLogsOnError
                    volumeMounts:
                      - mountPath: /community-plugins/
                        name: community-plugins
      persistence:
        storageClassName: aaaaaa
        storage: 1Gi

    Метод 2: Среда не имеет доступа в интернет

    1. Обновите поле spec.override, добавив конфигурацию sts, монтируя плагин в контейнер через hostPath. Убедитесь, что папка на узле, где планируется запуск инстанса, существует (в этом примере /root/yh/community-plugins) и плагин размещён там.
    2. Обновите поле spec.rabbitmq.envConfig, добавив переменные окружения для настройки пути к плагинам.
    3. Обновите поле spec.rabbitmq.additionalPlugins для включения плагина.
    4. После готовности инстанса выполните команду rabbitmq-plugins list для проверки включения плагина.

    Пример YAML приведён ниже:

    apiVersion: rabbitmq.com/v1beta1
    kind: RabbitmqCluster
    metadata:
      name: test
      labels:
        prometheus.io/port: "15692"
        prometheus.io/scrape: "true"
    spec:
      version: 3.12.4
      replicas: 3
      resources:
        requests:
          cpu: "1"
          memory: 2Gi
        limits:
          cpu: "1"
          memory: 2Gi
      service:
        type: NodePort
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchLabels:
                  app.kubernetes.io/name: test
              topologyKey: kubernetes.io/hostname
      rabbitmq:
        additionalPlugins:
          - rabbitmq_management_exchange
        envConfig: |
          RABBITMQ_PLUGINS_DIR=/opt/rabbitmq/plugins:/opt/rabbitmq/community-plugins
      override:
        statefulSet:
          spec:
            template:
              spec:
                containers:
                  - name: rabbitmq
                    resources: {}
                    volumeMounts:
                      - mountPath: /opt/rabbitmq/community-plugins
                        name: community-plugins
                initContainers:
                  - command:
                      - sh
                      - -c
                      - cp -r /temp-plugins/* /community-plugins/ && chown 999:999
                        /community-plugins/* && chmod 755 /community-plugins/*
                    image: registry.alauda.cn:60080/middleware/rabbitmq/rabbitmq3124-management:v3.15.0 # Other images can also be used
                    name: copy-community-plugins
                    resources: {}
                    securityContext:
                      privileged: true
                      runAsGroup: 0
                      runAsUser: 0
                    volumeMounts:
                      - mountPath: /community-plugins/
                        name: community-plugins
                      - mountPath: /temp-plugins/
                        mountPropagation: Bidirectional
                        name: temp-plugins
                volumes:
                  - emptyDir: {}
                    name: community-plugins
                  - hostPath:
                      path: /root/yh/community-plugins # Directory of plugins on the host
                      type: Directory
                    name: temp-plugins
      persistence:
        storageClassName: aaaaaa
        storage: 1Gi

    Инструкции по влиянию обновления

    • При необходимости обновления инстанса убедитесь, что соответствующие плагины включены как в конфигурации до обновления, так и после, чтобы обеспечить работоспособность.
    • Если в сообществе есть устаревшие плагины, своевременно отключайте их.
    • При включении пользовательских или сторонних плагинов убедитесь в совместимости версий.