死信主题分区选择
默认情况下,记录会使用与原始记录相同的分区发布到死信主题。 这意味着死信主题必须至少具有与原始记录相同数量的分区。
要更改此行为,请将 DlqPartitionFunction
实现作为 @Bean
添加到应用程序上下文中。
只能存在一个这样的 bean。
该函数提供消费者组、失败的 ConsumerRecord
和异常。
例如,如果您总是想路由到分区 0,您可以使用:
@Bean
public DlqPartitionFunction partitionFunction() {
return (group, record, ex) -> 0;
}
如果将消费者绑定的 |
也可以为 DLQ 主题定义自定义名称。
为此,请创建 DlqDestinationResolver
的实现作为 @Bean
添加到应用程序上下文中。
当绑定器检测到这样的 bean 时,它将优先使用,否则它将使用 dlqName
属性。
如果两者都未找到,它将默认为 error.<destination>.<group>
。
以下是 DlqDestinationResolver
作为 @Bean
的示例。
@Bean
public DlqDestinationResolver dlqDestinationResolver() {
return (rec, ex) -> {
if (rec.topic().equals("word1")) {
return "topic1-dlq";
}
else {
return "topic2-dlq";
}
};
}
在提供 DlqDestinationResolver
的实现时,需要记住一件重要的事情是,绑定器中的 provisioner 不会自动为应用程序创建主题。
这是因为绑定器无法推断实现可能发送到的所有 DLQ 主题的名称。
因此,如果您使用此策略提供 DLQ 名称,则应用程序有责任确保这些主题事先创建。