为了满足我的服务的可靠性,我需要使用kafka-smallrye
和quarkus
将所有无法反序列化的传入消息放入死信主题。
有关该主题的所有消息都应采用avro格式(但我不确定),并在schema-registry上定义了schema。
我以这种方式设置了使用者的配置:
mp:
messaging:
incoming:
test-in:
connector: smallrye-kafka
group:
id: test-in-consumer-group
topic: events-topic
failure-strategy: dead-letter-queue
schema:
registry:
url: http://localhost:8081
value:
deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
subject:
name:
strategy: io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
key:
deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
subject:
name:
strategy: io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
specific:
avro:
reader: true
我的消费者代码:
@ApplicationScoped
public class Consumer {
@Incoming("test-in")
public CompletionStage<Void> store(KafkaRecord<Key,SpecificRecord> data ){
String schemaFullName = data.getPayload().getSchema().getFullName();
System.out.println(schemaFullName);
// other consumer code
return data.ack();
}
}
当使用者无法反序列化消息时,将阻止使用过程,而是将消息移至无效字母并继续。我想反序列化错误不会产生nack
,因此消息无法移到死信中。
有一种方法可以将无法反序列化的消息移至死信主题?