事件交换插件
概述
客户端连接、队列、消费者和系统的其他部分会生成事件。例如,当创建连接时,会发出 connection.created
事件。当连接关闭或失败时,会发出 connection.closed
事件。
监控和审计服务可能对观察这些事件感兴趣。RabbitMQ 具有一种用于事件通知的极简机制,可以通过 rabbitmq_event_exchange
插件将其公开给 RabbitMQ 客户端。
该插件无需任何配置,只需激活即可
rabbitmq-plugins enable rabbitmq_event_exchange
消费内部事件
rabbitmq_event_exchange 插件消费 RabbitMQ 内部事件,并将它们重新发布到一个名为 amq.rabbitmq.event
的 主题交换机,从而将这些事件公开给客户端应用程序。要消费这些事件,应用程序需要声明一个队列并将其绑定到 amq.rabbitmq.event
交换机。
默认情况下,该插件在默认虚拟主机 (/
) 中声明主题交换机 amq.rabbitmq.event
。所有事件都使用路由键(主题)发布到此交换机,例如 exchange.created
、binding.deleted
等。因此,应用程序可以仅消费相关的事件。例如,要订阅所有用户事件(例如 user.created
、user.authentication.failure
等),请创建具有路由(绑定)键 user.#
的绑定。
该交换机的行为类似于 amq.rabbitmq.log
:所有内容都会发布到那里。如果应用程序的用户不被信任可以访问发布的事件,请不要允许他们对 amq.rabbitmq.event
交换机具有 read
访问权限。
内部事件机制发布的所有消息都将始终具有空白主体。相关的事件属性在消息元数据中传递。
每个事件都关联了各种事件属性。默认情况下,该插件在内部发布 AMQP 0.9.1 消息,并将事件属性转换为 AMQP 0.9.1 消息头。该插件可以选择配置为在内部发布 AMQP 1.0 消息,并将事件属性转换为 AMQP 1.0 消息注解,方法是在 rabbitmq.conf 中设置以下内容
event_exchange.protocol = amqp_1_0
内部事件机制发布的所有消息都将始终具有空白主体。相关的事件属性在消息元数据中传递。
由于该插件将事件属性设置为 AMQP 0.9.1 标头或 AMQP 1.0 消息注解,因此客户端应用程序可以选择仅订阅特定的事件属性(例如,为特定用户发出的所有事件)。这可以通过将队列绑定到headers 交换机,并将 headers 交换机绑定到 amq.rabbitmq.event
主题交换机来实现。
插件配置
默认情况下,rabbitmq_event_exchange
插件使用以下配置
event_exchange.vhost = /
event_exchange.protocol = amqp_0_9_1
要将插件切换为以 AMQP 1.0 格式发布事件,请使用
event_exchange.vhost = /
event_exchange.protocol = amqp_1_0
使用指南
在大多数情况下,在用于消费这些事件的队列上设置几千个最大长度限制将防止不必要的资源使用。
事件交换插件通常用于审计内部事件。应用程序可以将队列、流或一组队列(或流)绑定到此交换机,并存储生成的事件的历史记录。因此,此特殊交换机可以被视为结构化日志的一种形式。
入站连接数量、连接抖动、通道抖动或队列抖动的激增将产生大量事件。在内部事件队列上的消费者可能长时间缺席的环境中,队列可能会累积大量的积压。
在大多数情况下,在用于消费这些事件的队列上设置几千个最大长度限制将防止不必要的资源使用。
事件
此插件发布的事件(包括其路由键(主题))在此处记录。