提问人:Micah 提问时间:10/29/2020 最后编辑:Micah 更新时间:10/29/2020 访问量:601
我可以将 KafkaTemplate 与单例作用域一起使用吗?
Can I use KafkaTemplate with singleton scope?
问:
在弹簧上下文中作为单例连接是正确的方法,还是我可以使用原型范围?org.springframework.kafka.core.KafkaTemplate
单例示例:
@Slf4j
@RequiredArgsConstructor
@Service
public class IntegrationService {
private final KafkaTemplate kafkaTemplate;
public void sendToConsumerService(Dto dto) {
AvroDto avroDto = convertToAvro(dto);
try {
ListenableFuture<SendResult<Object, GenericRecord>> sendResultListenableFuture
= kafkaTemplate.send("consumer-topic",
TopicKeys.getTopicKey("consumer-topic", avroDto),
avroDto);
if (sendResultListenableFuture.isDone()) {
log.debug("Sent message to Kafka: {}", avroDto)
}
} catch (Exception ex) {
log.warn("Error sending message to Kafka", ex);
}
}
}
该问题与类名 KafkaTemplate 有关。 在我看来,每个请求都应该有一个新实例。
答:
2赞
Gary Russell
10/29/2020
#1
为什么您认为每个请求都需要一个新实例?通常只需要一个实例 - 事实上,即使你使用多个实例,也会使用相同的底层 Kafka(默认情况下)。Producer
评论
0赞
Micah
10/29/2020
因为它的名称模板,而不是 KafkaMessageService 或 ...寄件人。我想像字符串模板。好的,谢谢你。
0赞
Pale Blue Dot
6/19/2021
@Gary罗素。如果我使用的是 Transactional Producer,并且 2 个用户正在尝试同时启动事务,那么它会起作用吗?我们不需要 2 个 Kafka Producer 实例吗?请在这里看到我的问题,如果你能回答 stackoverflow.com/questions/68037127/......
评论