ActiveMQ
ActiveMQ Sink 连接器
支持的引擎
Spark
Flink
SeaTunnel Zeta
描述
用于把 SeaTunnel 数据写入 ActiveMQ 队列。每一行数据都会被序列化成一条 JSON 文本消息。 消费队列请参见独立的 ActiveMQ Source。
关键特性
选项
| 名称 | 类型 | 是否必传 | 默认值 | 描述 |
|---|---|---|---|---|
| uri | string | 是 | - | ActiveMQ Broker 地址,例如 tcp://localhost:61616。 |
| queue_name | string | 是 | - | 要写入的队列名称。 |
| username | string | 否 | - | 创建 ActiveMQ 连接时使用的用户名。配置该项时必须同时配置 password。 |
| password | string | 否 | - | 创建 ActiveMQ 连接时使用的密码。配置该项时必须同时配置 username。 |
| client_id | string | 否 | - | 连接工厂使用的 JMS 客户端 ID。 |
| check_for_duplicate | boolean | 否 | - | 是否让 ActiveMQ 客户端检查重复消息。 |
| always_session_async | boolean | 否 | - | 是否始终为每个 Session 使用独立线程分发消息。 |
| always_sync_send | boolean | 否 | - | 是否始终使用同步方式发送消息。 |
| close_timeout | int | 否 | - | 关闭连接的超时时间,单位毫秒。 |
| dispatch_async | boolean | 否 | - | Broker 是否异步分发消息。 |
| nested_map_and_list_enabled | boolean | 否 | - | 是否允许结构化消息属性和 MapMessage 条目中包含嵌套的 Map、List 对象。 |
| warn_about_unstarted_connection_timeout | int | 否 | - | 连接没有正确启动时,ActiveMQ 客户端发出警告前等待的毫秒数。设置为小于 0 的值可以关闭这个警告。 |
| consumer_expiry_check_enabled | boolean | 否 | - | 是否在每个 MessageConsumer 分发消息前检查消息是否已经过期。 |
| max_thread_pool_size | int | 否 | 1000 | ActiveMQ 连接工厂内部用于消息分发的线程池最大大小。默认值为 1000。 |
| send_timeout | int | 否 | 0 | ActiveMQ 连接工厂的发送超时时间,单位毫秒。值为 0 表示不超时。默认值为 0。 |
| use_compression | boolean | 否 | false | 是否在发送消息前对消息体进行压缩。默认值为 false。 |
| connect_response_timeout | int | 否 | 0 | 连接建立时等待 Broker 响应的超时时间,单位毫秒。值为 0 表示不超时。默认值为 0。 |
| delivery_mode | int | 否 | 2 | JMS 投递模式:1 为非持久化,2 为持久化。默认值为 2(持久化)。 |
| priority | int | 否 | 4 | JMS 消息优先级,0(最低)到 9(最高)。默认值为 4。 |
| producer_window_size | int | 否 | 0 | 异步发送时的流控窗口大小,单位字节。值为 0 表示不限流。默认值为 0。 |
| time_to_live | long | 否 | 0 | 消息存活时间,单位毫秒。值为 0 表示永不过期。默认值为 0。 |
| use_async_send | boolean | 否 | false | 为 true 时发送不等 Broker 确认直接返回,提升吞吐量。默认值为 false。 |
注意事项
uri是连接入口,Broker 的主机和端口都写在这里,例如tcp://activemq-host:61616。username和password是可选项;如果 Broker 需要认证,这两个配置要一起写。- 连接器会把每一行 SeaTunnel 数据作为一条 JSON 文本消息写入
queue_name,当前没有单独的format配置。 - Broker 地址请使用
uri配置,host和port不是 ActiveMQ Sink 的配置项。 - 该 Sink 前面可以接任意 SeaTunnel Source。ActiveMQ 连接器只负责把最终的数据行发送到队列。
- 当
use_async_send = true或delivery_mode = 1(非持久化)时,ActiveMQ 客户端发送消息后不等 Broker 确认即返回,且本连接器未注册ExceptionListener,因此发送失败可能不会通知到作业。仅在可接受消息丢失的场景下使用这些选项。 - 工厂级选项(
max_thread_pool_size、send_timeout、use_compression、connect_response_timeout、producer_window_size、use_async_send)仅在显式配置时生效。未配置时,使用uri中对应的jms.*参数(如果存在)或 ActiveMQ 客户端默认值。
示例
把 FakeSource 数据写入 ActiveMQ 队列:
env {
parallelism = 1
job.mode = "BATCH"
}
source {
FakeSource {
schema = {
fields {
id = int
name = string
}
}
rows = [
{ kind = INSERT, fields = [1, "Alice"] }
{ kind = INSERT, fields = [2, "Bob"] }
]
}
}
sink {
ActiveMQ {
uri = "tcp://localhost:61616"
username = "admin"
password = "admin"
queue_name = "testQueue"
}
}
在流式模式下,Sink 会保持与 Broker 的连接持续打开,每来一行数据就写入一条。用户名 / 密码也可以直接
写在 uri 中,例如 tcp://admin:admin@localhost:61616:
env {
parallelism = 1
job.mode = "STREAMING"
}
source {
FakeSource {
schema = {
fields {
id = int
name = string
}
}
rows = [
{ kind = INSERT, fields = [1, "Alice"] }
]
}
}
sink {
ActiveMQ {
uri = "tcp://admin:admin@localhost:61616"
queue_name = "testQueue"
}
}
FAQ
ActiveMQ Sink 支持 topic 吗?
不支持。当前 Sink 只会写入由 queue_name 指定的 JMS 队列,连接器工厂并不支持 topic 目的地。如果需要发布/订阅语义,请改用通用的 JMS 连接器或者其它专门面向 ActiveMQ topic 的桥接组件;要直接驱动本连接器,请继续用 queue。
username 和 password 是怎么校验的?
这两项都是可选的。设置的时候必须同时设置(只设其中一个会让任务启动失败)。它们作用于 JMS 连接工厂这一层,因此会覆盖已经嵌在 uri 里的凭证。如果 Broker 需要鉴权,建议显式配置 username/password 而不是把它们写在 URL 里——这样凭证会出现在任务配置日志里,而不是埋在连接串里。
每条数据最终变成什么格式的消息?
每行 SeaTunnel 数据会被序列化为一条 JSON 文本消息写到配置的 queue_name 里。连接器没有 format 配置项,JSON 结构由 Sink 序列化器固定,所以对端如果想要其它编码,需要自己先解码 JSON body。
支持精确一次写入吗?
不支持。Sink 是尽力而为模式,重连行为由底层 JMS 客户端决定。如果可以接受来自上游的至少一次重放,请在任务级别启用 checkpoint。
变更日志
变更日志
| 变更 | 提交 | 版本 |
|---|---|---|
| [Feature][Connector-V2] Add checkpoint-aware ActiveMQ queue source | - | Next |