Quarkus结合Debezium实现发件箱模式:如何为发件箱表添加自定义列
解决步骤
1. 先排查JPA持久化问题
你首先要确认新增的自定义列已经被正确写入Postgres的发件箱表,这一步和Debezium配置无关,是Quarkus发件箱扩展的实体映射问题:
- 在你自定义的发件箱实体类中,添加和数据库自定义列对应的字段,添加
@Column注解完成字段映射,同时补全getter/setter方法 - 调用
event.fire方法时,主动给该自定义字段赋值 - 触发事件后直接查询数据库发件箱表,确认该列已经有对应值,再继续配置Debezium属性
2. 配置table.fields.additional.placement属性
如果数据库中该字段已经有值,但Debezium捕获的事件中没有该字段,在application.properties中按如下规则配置即可:
Quarkus发件箱扩展的该属性前缀为quarkus.debezium-outbox,属性值格式为自定义列名:放置位置[:别名],放置位置可选三个值:
header:将字段放到Debezium事件的头信息中envelope:将字段放到Debezium事件的根结构下payload:将字段放到Debezium事件的业务载荷结构中
示例配置如下:
# 单个自定义列配置:列名为biz_id,放到事件头,别名为biz_id quarkus.debezium-outbox.table.fields.additional.placement=biz_id:header:biz_id # 多个自定义列配置:用英文逗号分隔即可 quarkus.debezium-outbox.table.fields.additional.placement=biz_id:header:biz_id,order_type:payload:order_type
3. 验证配置
重启应用后触发发件箱事件,查看Debezium输出的事件结构,即可看到自定义字段已经被添加到指定位置。
内容的提问来源于stack exchange,提问作者Pasquale Forte
相关产品推荐
相关产品推荐

