关于KafkaTemplate类型参数

Regarding KafkaTemplate type parameters

我正在使用 KafkaTemplate#send(Message<?>)。我不发送密钥。我想知道是否可以使用 KafkaTemplate<Object,Object> 的类型参数? KafkaTemplate<Object, PlanDTO> 会是一个更相关的类型参数吗?是否有与此相关的规则?我正在使用 spring boot 2.5.4jdk 11。这是我拥有的:

@Component
public class PlanProducer 
{
    @Autowired
    private KafkaTemplate<Object, Object> kafkaTemplate;

    public void postPlanToKafka(PlanDTO plan)
    {
            Message<PlanDTO> message = MessageBuilder.withPayload(plan)
            .setHeader(KafkaHeaders.TOPIC, "plan")
            .setHeader(KafkaHeaders.TIMESTAMP, Instant.now().getEpochSecond())
            .build();
            ListenableFuture<SendResult<Object, Object>> future = kafkaTemplate.send(message);
            future.addCallback(new KafkaSendCallback<Object, Object>() 
            {
                @Override
                public void onSuccess(SendResult<Object, Object> result) 
                {
                    RecordMetadata metadata = result.getRecordMetadata();
                    log.info("Message sent successfully with the following information : topic - {} , "
                            + "partition  - {} , offset - {}",metadata.topic(),
                            metadata.partition(),metadata.offset());
                }

                @Override
                public void onFailure(KafkaProducerException e) 
                {
                    log.error("Error posting data to kafka ={}",e);
                }
            });
    }
}

使用<Object, Object>完全没问题。

没有“规则”,因为实际类型由序列化程序确定。

2.8 中的新 receive() 方法将需要一个 narrrower 类型,但对于发送,这不是问题。