【发布时间】:2020-09-07 11:49:13
【问题描述】:
通过我的在线申请:
- 用户在浏览器中单击一个按钮,该按钮对应用程序进行安静的调用
- 控制器接收到 RESTful 调用并构建命令并接受拒绝命令
- 如果有效,则将命令触发到 Kafka 主题
- 应用程序代码使用命令并将命令提供给适当的处理程序或处理程序
- 处理程序对域概念执行命令
- 域概念会将事件触发到 Kafka 主题
再次接收消息并转发给感兴趣的处理程序的应用程序消费者
-
示例命令
RegisterClientCommandPlaceBookingCommandCancelBookingCommand
-
示例事件
ClientRegisteredEventBookingPlacedEventBookingCancelledEvent
命令和事件的类型都是
DomainMessage每个域消息都有一个
sequence-number、createdOn字段我决定使用具有模式版本支持的 Avro 来进行消息交换
-
春季卡夫卡制作人:
ProducerFactory<String?, GenericRecord?>
-
春季卡夫卡消费者:
ConsumerFactory<String?, GenericRecord?>
发送 Kafka 消息时的点 (1),GenericRecord 的创建方式如下:
return GenericRecordBuilder(schema).apply {
set("first", registerClientCommand.first)
set("last", registerClientCommand.last)
set("email", registerClientCommand.email)
set("mobile", registerClientCommand.mobile)
}.build()
收到消息时的点(2): - 从 GenericRecord 构建地图 - 并使用 Map 中的字段值创建一个具体的 RegisterClientCommand
return RegisterClientCommand(
fields.get("first"),
fields.get("last"),
fields.get("email"),
fields.get("mobile")
)
你觉得这正确吗?
我不喜欢我必须:对于每个 DomainMessage(命令、事件)
- 在生产到 Kafka 时构建 GenericRecord,如上述第 (1) 点所述。
- 并构建一个字段值映射,然后构建具体的域消息 从 Kafka 消费时,如上述第 (2) 点所述。
我在这里以正确的方式使用 Avro 吗?
【问题讨论】:
标签: spring kotlin apache-kafka avro confluent-platform