Apache kafka Kafka Streams:有人能给我介绍一个完全实现的java示例,它将消息发送到DLQ(死信队列)主题吗
我对streams应用程序中的另一个系统有外部依赖关系,每当发生反序列化/生产者/或任何外部/网络异常时,我希望从streams应用程序中向DLQ kafka topic发布消息,以便我可以监视该主题并根据需要重新处理记录。我似乎在任何地方都找不到这样做的好例子。我找到的最接近的参考是,但是1。它只讨论反序列化ExceptionHandler,其他异常场景呢?2.它没有演示配置/管理/关闭关联KafkaProducer的正确方法 我想尝试捕获外部依赖代码,并将导致异常的记录发送到死信队列主题。任何帮助都将不胜感激 对于处理逻辑,您可以采用以下方法:Apache kafka Kafka Streams:有人能给我介绍一个完全实现的java示例,它将消息发送到DLQ(死信队列)主题吗,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我对streams应用程序中的另一个系统有外部依赖关系,每当发生反序列化/生产者/或任何外部/网络异常时,我希望从streams应用程序中向DLQ kafka topic发布消息,以便我可以监视该主题并根据需要重新处理记录。我似乎在任何地方都找不到这样做的好例子。我找到的最接近的参考是,但是1。它只讨论反序列化ExceptionHandler,其他异常场景呢?2.它没有演示配置/管理/关闭关联KafkaProducer的正确方法 我想尝试捕获外部依赖代码,并将导致异常的记录发送到死信队列主题。任
someKStream
//处理逻辑
.mapValues(inputValue->{
//对于每次执行,下面的“return”可能会提供一个不同于上一次运行的类!
//例如,“返回失败处理?失败值:成功值;”
//其中failValue和successValue没有相关的类
return someObject;//someObject类在运行时根据您的业务而变化
})//这里您将使用KStream->yes,对象作为值!
//你可以有不同的选择逻辑
//下面的目标主题只是一个示例
.to((k,v,recordContext)->failValueClass的v实例?
“死信主题”:“成功主题”,
//你完全可以忽略“生产”部分
//并且仅依赖于spring启动属性,例如。
//spring.kafka.streams.properties.default.key.serde=yourKeySerde
//spring.kafka.streams.properties.default.value.serde=org.springframework.kafka.support.serializer.JsonSerde
与(你的凯瑟德),
//JsonSerde可以是根据需要配置的实例
//(禁用类型映射或标题设置等)
新的JsonSerde());
您的类虽然不同,并且指向不同的主题,但将按预期进行序列化
如果不使用to()
,而是希望继续进行其他处理,则可以使用branch()
,根据kafka值类拆分逻辑;branch()
的诀窍是返回KStream[]
,以便进一步允许将KStream[]
中的单个项转换到适当的类中,以便处理逻辑可以采用以下方法:
someKStream
//处理逻辑
.mapValues(inputValue->{
//对于每次执行,下面的“return”可能会提供一个不同于上一次运行的类!
//例如,“返回失败处理?失败值:成功值;”
//其中failValue和successValue没有相关的类
return someObject;//someObject类在运行时根据您的业务而变化
})//这里您将使用KStream->yes,对象作为值!
//你可以有不同的选择逻辑
//下面的目标主题只是一个示例
.to((k,v,recordContext)->failValueClass的v实例?
“死信主题”:“成功主题”,
//你完全可以忽略“生产”部分
//并且仅依赖于spring启动属性,例如。
//spring.kafka.streams.properties.default.key.serde=yourKeySerde
//spring.kafka.streams.properties.default.value.serde=org.springframework.kafka.support.serializer.JsonSerde
与(你的凯瑟德),
//JsonSerde可以是根据需要配置的实例
//(禁用类型映射或标题设置等)
新的JsonSerde());
您的类虽然不同,并且指向不同的主题,但将按预期进行序列化
如果不使用to()
,而是希望继续进行其他处理,则可以使用branch()
,根据kafka值类拆分逻辑;branch()
的诀窍是返回KStream[]
,以便进一步允许将KStream[]
中的各个项目强制转换到适当的类中