对于最新稳定版本,请使用 Spring for Apache Kafka 4.0.0spring-doc.cadn.net.cn

制作人拦截者春季管理

从 3.0.0 版本开始,对于生产者拦截器,你可以让 Spring 直接以 bean 形式管理,而不是在 Apache Kafka 生产者配置中提供拦截器的类名。 如果你采用这种方法,那么你需要启动生产者拦截器卡夫卡模板. 以下是一个使用相同情况的示例我的制片人拦截者但改成不使用内部配置属性。spring-doc.cadn.net.cn

public class MyProducerInterceptor implements ProducerInterceptor<String, String> {

    private final SomeBean bean;

    public MyProducerInterceptor(SomeBean bean) {
        this.bean = bean;
    }

    @Override
    public void configure(Map<String, ?> configs) {
    }

    @Override
    public ProducerRecord<String, String> onSend(ProducerRecord<String, String> record) {
        this.bean.someMethod("producer interceptor");
        return record;
    }

    @Override
    public void onAcknowledgement(RecordMetadata metadata, Exception exception) {
    }

    @Override
    public void close() {
    }

}
@Bean
public MyProducerInterceptor myProducerInterceptor(SomeBean someBean) {
  return new MyProducerInterceptor(someBean);
}

@Bean
public KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> pf, MyProducerInterceptor myProducerInterceptor) {
   KafkaTemplate<String, String> kafkaTemplate = new KafkaTemplate<>(pf);
   kafkaTemplate.setProducerInterceptor(myProducerInterceptor);
}

就在记录发送之前,onSend调用生产者拦截器的方法。 一旦服务器发送了关于数据发布的确认,那么on致谢方法被调用。 这on致谢在制作人调用任何用户回调之前调用。spring-doc.cadn.net.cn

如果你有多个这样的生产者拦截器,并且在春季期间需要应用这些卡夫卡模板,你需要使用合成制作人拦截者相反。合成制作人拦截者允许按顺序添加单个生产者拦截器。 来自底层的方法制片人拦截者实现按添加顺序调用合成制作人拦截者.spring-doc.cadn.net.cn