PublishAMQP Processor
描述
从 FlowFile 的内容创建 AMQP 消息并将消息发送到 AMQP 交换器。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Exchange Name | | 消息将发送到的 AMQP 交换机的名称。通常由 AMQP 管理员提供(例如「amq.direct」)。这是一个可选属性。如果留空,消息将发送到默认 AMQP 交换机。 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Routing Key | | AMQP 用于将消息从交换机路由到目标队列的路由键名称。通常由管理员提供(例如「myKey」)。当消息发送到默认交换机时,此属性对应于目标队列名称,否则必须设置从交换机到队列通过路由键的绑定(通常由 AMQP 管理员设置) 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Delivery Guarantee | AT_MOST_ONCE |
| 控制处理器在路由 FlowFile 之前是否等待发布确认(代理确认/否定确认)。「至少一次」启用 RabbitMQ 发布者确认:处理器阻塞直到代理确认消息,不可传递的消息(无匹配队列绑定)被可靠地路由到「failure」。这以防止静默数据丢失为代价,但会显著增加延迟,特别是对于远程代理。「最多一次」使用原始的即发即忘模式:消息发送后不等待确认。不可传递的消息仅作为警告记录,FlowFile 仍被路由到「success」。此模式提供最大吞吐量但不提供传递保证。 |
| Headers Source | AMQP_HEADERS_ATTRIBUTE |
| 将应用于已发布消息的标头的来源。 |
| Headers Pattern | | 将针对 FlowFile 属性评估的正则表达式,用于选择匹配的属性并作为 AMQP 头。属性名将用作头键。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Header Separator | , | 用于拆分头的键值的字符。值必须仅为一个字符。否则您将收到错误消息 | |
| Brokers | | 已知 AMQP 代理的逗号分隔列表,格式为 <host>:<port>(例如 localhost:5672)。如果设置了此项,主机名和端口将被忽略。仅包含来自同一 AMQP 集群的主机。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Host Name | localhost | AMQP 代理的网络地址(例如本地主机)。 如果设置了 Brokers,则忽略此属性。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Port | 5672 | 标识 AMQP 代理端口的数值(例如 5671)。 如果设置了 Brokers,则忽略此属性。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Virtual Host | | 隔离 AMQP 系统以增强安全性的虚拟主机名。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Username | | 用于身份验证和授权的用户名。 支持表达式语言:是(仅使用环境/系统变量求值) | |
| Password | | 密码用于认证和授权。 敏感属性:是 | |
| AMQP Version | 0.9.1 |
| AMQP 版本。 目前仅支持AMQP v0.9.1。 |
| SSL Context Service | | 控制器服务 API:SSLContextProvidercn.org.acal.lynxus-lynxus-standard-services-api-nar-2.11.8 | SSL 上下文服务用于为 TLS/SSL 连接提供客户端证书信息。 |
| Client Certificate Authentication Enabled | false |
| 使用 SSL 证书而不是用户名/密码进行身份验证。 |
关系 (Relationships)
| 名称 | 描述 | 自动终止 |
|---|---|---|
failure | 所有无法路由到 AMQP 目标的 FlowFile 都将路由到此关系 | 否 |
success | 发送到 AMQP 目标的所有 FlowFile 都会路由到此关系 | 否 |
读取的 FlowFile 属性
| 名称 | 描述 |
|---|---|
amqp$appId | 要在 AMQP 消息上设置的 App ID 字段 |
amqp$contentEncoding | 要在 AMQP 消息上设置的内容编码 |
amqp$contentType | 要在 AMQP 消息上设置的内容类型 |
amqp$headers | 如果 'Header Source' 设置为使用它,则要在 AMQP 消息上设置的头。请参阅处理器的附加详细信息。 |
amqp$deliveryMode | 消息传递模式的数值指示器 |
amqp$priority | 消息优先级 |
amqp$correlationId | 消息的关联 ID |
amqp$replyTo | 消息的回复字段(Reply-To)的值 |
amqp$expiration | 消息过期时间 |
amqp$messageId | 消息的唯一 ID |
amqp$timestamp | 消息的时间戳,以自纪元以来的毫秒数表示 |
amqp$type | 消息类型 |
amqp$userId | 用户的 ID |
amqp$clusterId | AMQP 集群的 ID |
状态管理
该组件不存储状态。
受限 (Restricted)
该组件不受限。
输入要求
该组件要求有传入连接。
系统资源考量
| 资源 | 描述 |
|---|---|
| MEMORY | An instance of this component can cause high usage of this system resource. Multiple instances or high concurrency settings may result a degradation of performance. |
详细说明
PublishAMQP
概述
该 Processor 把传入 FlowFile 的内容发布到基于 AMQP 的消息系统。编写本文档时,支持的 AMQP 协议版本为 v0.9.1。
该组件基于 RabbitMQ Client API, 以下指南和教程 也可以帮你复习一些 AMQP 基础知识。
该 Processor 做两件事。它通过提取 FlowFile 的内容(消息体和 Attribute)来构建 AMQP Message。消息构建完成后,会被发送到 AMQP Exchange。AMQP Properties 会从 FlowFile 中提取,并转换为 com.rabbitmq.client.AMQP.BasicProperties 与消息一起发送。成功后,传入 FlowFile 会转移到 success Relationship;失败时,FlowFile 会被施加惩罚(penalize)并转移到 failure Relationship。
我的消息去哪了?
在典型的 AMQP exchange 模型中,发送到 AMQP Exchange 的消息会基于 Routing Key 被路由到 队列 中的最终目的地。这称为绑定(Binding)。如果由于某些配置错误, _Exchange、Routing Key 和队列_之间的绑定没有建立,消息将没有最终目的地, 会被退回(即数据不会到达队列)。如果发生这种情况,你会在 app-log 和 bulletin 中看到相应的日志。修复绑定(通常由 AMQP 管理员完成)即可解决问题。
AMQP 属性
从 FlowFile 提取的 Attribute,如果名称带 amqp$ 前缀(例如 amqp$contentType=text/xml),就被视为 AMQP property 的候选。要给消息添加额外的 AMQP property,可以在源 Processor 和 PublishAMQP Processor 之间使用 UpdateAttribute Processor。以下是可用的标准 AMQP property 列表: ("amqp$contentType", "amqp$contentEncoding", "amqp$headers"(当 'Headers Source' 设为 'Attribute "amqp$headers" Value' 时)、"amqp$deliveryMode", "amqp$priority", "amqp$correlationId", "amqp$replyTo", "amqp$expiration", "amqp$messageId", "amqp$timestamp", "amqp$type", "amqp$userId", "amqp$appId", "amqp$clusterId")
AMQP 消息 Header 来源
Processor 附加到 AMQP 消息的 header 取决于 "Headers Source" 属性的值。
- Attribute "amqp$headers" Value - Processor 会读取单个 Attribute "amqp$headers",按 "Header Separator" 拆分,然后按 key=value 格式读取 header。
- Attributes Matching Regex - Processor 会通过匹配 "Attributes To Headers Regular Expression" 提供的正则来选取 FlowFile Attribute。Attribute 的名称用作 header 的键。
配置详情
编写本文档时,只定义了适用于大多数场景的核心配置属性。 其他属性会随着该组件的发展逐步定义。配置 PublishAMQP:
- Exchange Name - [可选] 消息将发送到的 AMQP exchange 名称。通常由管理员提供(例如 'amq.direct')。这是一个可选属性。如果留空,消息会发送到默认的 AMQP exchange。关于 AMQP Exchange 的更多信息参见 这里。
- Routing Key - [必需] AMQP 用于把消息从 exchange 路由到目标队列的路由键名称。通常由管理员提供(例如 'myKey')。当消息发送到默认 exchange 时,该属性对应目标队列名称;否则必须设置从 Exchange 经 Routing Key 到队列的绑定(通常由 AMQP 管理员完成)。关于 AMQP Exchange 和 Binding 的更多信息参见 这里。
- Host Name - [必需] 运行 AMQP 代理的主机名。通常由管理员提供(例如 'myhost.com')。默认为 'localhost'。
- Port - [必需] 运行 AMQP 代理的端口号。通常由管理员提供(例如 '2453')。默认为 '5672'。
- User Name - [必需] 连接 AMQP 代理的用户名。通常由管理员提供(例如 'me')。默认为 'guest'。
- Password - [必需] 与用户名配合使用的密码。通常由管理员提供。 默认为 'guest'。
- Use Certificate Authentication - [可选] 使用 SSL 证书的通用名称进行认证,而不是用户名/密码。只能与 SSL 配合使用。默认为 'false'。
- Virtual Host - [可选] 用于隔离 AMQP 系统以增强安全性的虚拟主机名。关于虚拟主机的更多细节参见 这篇博客。