关于KafkaTemplate类型参数
Regarding KafkaTemplate type parameters
我正在使用 KafkaTemplate#send(Message<?>)
。我不发送密钥。我想知道是否可以使用 KafkaTemplate<Object,Object>
的类型参数? KafkaTemplate<Object, PlanDTO>
会是一个更相关的类型参数吗?是否有与此相关的规则?我正在使用 spring boot 2.5.4
和 jdk 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 类型,但对于发送,这不是问题。
我正在使用 KafkaTemplate#send(Message<?>)
。我不发送密钥。我想知道是否可以使用 KafkaTemplate<Object,Object>
的类型参数? KafkaTemplate<Object, PlanDTO>
会是一个更相关的类型参数吗?是否有与此相关的规则?我正在使用 spring boot 2.5.4
和 jdk 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 类型,但对于发送,这不是问题。