java - 关于 KafkaTemplate 类型参数
问题描述
我正在使用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()
方法将需要更窄的类型,但对于发送,这不是问题。
推荐阅读
- node.js - 有没有办法自动将静态文件上传/更新到 Oracle Apex?
- java - java中的代码TextFieldName.setText(“”)是否有任何替代方法来清除文本字段中的文本?
- javascript - 日文在手机上看不到
- javascript - 想要在 Node JS/MySQL 中将 12 小时时间字符串转换为时间对象
- asp.net-core - ASP.NET Core 3.0 - 如何附加 Visual Studio 调试器?
- angular - 如何在离子4中的数据加载之前显示显示图像
- docker - 在 docker compose 中更改共享内存大小
- sql-server - 未为列设置 AWS SCT 默认绑定
- ssl-certificate - 在 OKD 中连接到 docker 注册表的 TLS 握手问题
- python - 无法在 Python 中执行 SQL HANA 查询 - 语法错误