#插件支持
#目录
#插件机制
RabbitMQ 支持插件,通过多种方式扩展功能:支持更多协议、系统状态监控、额外的 AMQP 0-9-1 交换类型、节点联邦等。许多功能以插件形式实现,并随核心版本提供。
更多信息,请参考:如何使用 RabbitMQ 插件。
#操作说明
#查看实例中支持的插件
选择 RabbitMQ 实例的任意节点,进入 Pods,执行以下命令以查看插件的支持和启用状态:
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 身份验证的插件,允许通过 HTTP 服务验证 RabbitMQ 用户 |
| rabbitmq_auth_backend_ldap | 支持 LDAP 身份验证的插件,允许通过 LDAP 服务验证 RabbitMQ 用户 |
| rabbitmq_auth_backend_oauth2 | 支持 OAuth 2.0 身份验证的插件,允许通过 OAuth 2.0 服务验证 RabbitMQ 用户 |
| rabbitmq_auth_mechanism_ssl | 支持 SSL 身份验证的插件,允许使用 SSL 证书验证 RabbitMQ 用户 |
| rabbitmq_consistent_hash_exchange | 实现一致性哈希的插件,允许创建特殊的交换,基于消息路由键或头部计算哈希值,然后将消息发送到相应的队列 |
| rabbitmq_delayed_message_exchange | 支持延迟消息的插件,允许创建特殊的交换,根据消息头设置延迟,临时将消息存储在内存或磁盘中,直到延迟过期,然后将消息发送到相应的队列 |
| rabbitmq_event_exchange | 发布 RabbitMQ 事件的插件,允许创建特殊的交换,将各类 RabbitMQ 事件(如连接、通道、队列、用户、权限的创建、删除和修改等)发送到对应队列,支持多种事件类型和过滤选项 |
| rabbitmq_federation | 连接多个 RabbitMQ 实例的插件,允许创建联邦,将消息从一个 RabbitMQ 实例转发到另一个 |
| rabbitmq_federation_management | 管理 RabbitMQ 联邦的插件,允许通过 Web 界面查看和配置 RabbitMQ 联邦 |
| rabbitmq_jms_topic_exchange | 支持 JMS 主题的插件,允许创建特殊的交换,根据消息的 JMSDestination 头部路由消息 |
| rabbitmq_management | 管理和监控 RabbitMQ 的插件,提供 Web 界面,允许查看 RabbitMQ 的状态、配置、统计信息和日志,以及执行一些操作 |
| rabbitmq_management_agent | 支持 RabbitMQ 管理的插件,提供代理,报告各种信息,如内存、磁盘、连接、通道、队列等的使用情况,并允许管理插件向 RabbitMQ 节点发送各种命令 |
| rabbitmq_mqtt | 支持 MQTT 协议的插件,允许 MQTT 客户端连接到 RabbitMQ,支持多种特性,如 QoS、保留消息、遗嘱消息、主题过滤等 |
| rabbitmq_peer_discovery_aws | 支持 AWS 节点发现的插件,可以自动发现并加入 AWS 环境中的 RabbitMQ 集群,支持各种 AWS 服务 |
| rabbitmq_peer_discovery_common | 支持通用节点发现的插件,提供一些基本功能,如节点注册、注销、查询等,可供其他节点发现插件使用 |
| rabbitmq_peer_discovery_consul | 支持 Consul 节点发现的插件,可以自动发现并加入 Consul 环境中的 RabbitMQ 集群 |
| rabbitmq_peer_discovery_etcd | 支持 etcd 节点发现的插件,可以自动发现并加入 etcd 环境中的 RabbitMQ 集群 |
| rabbitmq_peer_discovery_k8s | 支持 Kubernetes 节点发现的插件;允许自动发现并加入 Kubernetes 环境中的 RabbitMQ 集群 |
| rabbitmq_prometheus | 支持 Prometheus 监控的插件;允许使用 Prometheus 收集和显示各种 RabbitMQ 指标 |
| rabbitmq_random_exchange | 实现随机路由的插件,允许创建特殊的交换,随机将消息发送到一个或多个队列 |
| rabbitmq_recent_history_exchange | 实现最近历史路由的插件,允许创建特殊的交换,将消息发送到最近接收消息的一个或多个队列 |
| rabbitmq_sharding | 实现分片的插件,允许创建特殊的队列,在多个子队列之间分发消息 |
| rabbitmq_shovel | 转发消息的插件,允许定义规则,将消息从一个队列或交换转发到另一个 |
| rabbitmq_shovel_management | 管理 RabbitMQ 铲子的插件,允许通过 Web 界面查看和配置 RabbitMQ 铲子 |
| rabbitmq_stomp | 支持 STOMP 协议的插件,允许使用 STOMP 客户端连接到 RabbitMQ,支持各种特性 |
| rabbitmq_stream | 支持流协议的插件,允许创建特殊的队列,用于存储和传输大量有序消息 |
| rabbitmq_stream_management | 管理 RabbitMQ 流的插件,允许通过 Web 界面查看和配置 RabbitMQ 流 |
| rabbitmq_top | 查看 RabbitMQ 性能的插件,提供命令行界面,使您能够查看各种 RabbitMQ 资源的使用情况 |
| rabbitmq_tracing | 跟踪 RabbitMQ 消息的插件,可以创建跟踪,记录 RabbitMQ 消息的内容和属性到文件或日志中 |
| rabbitmq_trust_store | 管理 RabbitMQ 信任存储的插件,允许在 RabbitMQ 中存储和更新 SSL 证书 |
| rabbitmq_web_dispatch | 支持 RabbitMQ Web 服务的插件,提供框架,用于定义和处理 RabbitMQ 内的 HTTP 请求 |
| rabbitmq_web_mqtt | 支持通过 WebSockets 的 MQTT 的插件,允许使用 WebSocket 客户端连接到 RabbitMQ |
| rabbitmq_web_mqtt_examples | 演示通过 WebSockets 的 MQTT 的插件,提供多个示例 |
| rabbitmq_web_stomp | 支持通过 WebSockets 的 STOMP 的插件,允许使用 WebSocket 客户端连接到 RabbitMQ |
| rabbitmq_web_stomp_examples | 演示通过 WebSockets 的 STOMP 的插件,提供多个示例 |
#启用/禁用已包含在镜像中的插件
当需要启用或禁用已包含在镜像中的插件时,可以更新实例 YAML 文件中的相关字段。以 rabbitmq_shovel 为例:
additionalPlugins:
- rabbitmq_top
- rabbitmq_shovel#启用第三方或自定义插件
当需要启用未包含在镜像中的自定义插件或社区插件时,无法通过直接编辑 YAML 中的 additionalPlugins 来启用它们。相反,必须在启动 Pods 之前下载它们到容器中。
#方法 1:环境能够访问互联网
- 更新 spec.override 字段以添加 sts 配置,在 initContainer 中下载插件。
- 更新 spec.rabbitmq.envConfig 字段以添加环境变量,配置插件路径。
- 更新 spec.rabbitmq.additionalPlugins 字段以启用插件。
- 实例准备就绪后,使用命令
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 # 或其他含 curl 命令的镜像
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:环境无法访问互联网
- 更新 spec.override 字段以添加 sts 配置,通过 hostPath 将插件挂载到容器中。确保调度实例的节点上的目录存在(在本例中为 /root/yh/community-plugins),并确保将插件放置在该目录中。
- 更新 spec.rabbitmq.envConfig 字段以添加环境变量,配置插件路径。
- 更新 spec.rabbitmq.additionalPlugins 字段以启用插件。
- 实例准备就绪后,使用命令
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 # 也可以使用其他镜像
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 # 主机上插件的目录
type: Directory
name: temp-plugins
persistence:
storageClassName: aaaaaa
storage: 1Gi#升级影响说明
- 当实例需要升级时,请确保在升级前后实例配置中启用了相关插件,以确保功能正常。
- 若社区存在已弃用的插件,应及时将其下线。
- 启用自定义或第三方插件时,请确保版本之间的兼容性。