Apache kafka Kafka Streams:有人能给我介绍一个完全实现的java示例,它将消息发送到DLQ(死信队列)主题吗

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的正确方法 我想尝试捕获外部依赖代码,并将导致异常的记录发送到死信队列主题。任

我对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[]
中的各个项目强制转换到适当的类中