我可以将 KafkaTemplate 与单例作用域一起使用吗?

Can I use KafkaTemplate with singleton scope?

提问人:Micah 提问时间:10/29/2020 最后编辑:Micah 更新时间:10/29/2020 访问量:601

问:

在弹簧上下文中作为单例连接是正确的方法,还是我可以使用原型范围?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 有关。 在我看来,每个请求都应该有一个新实例。

Spring spring-boot spring-kafka

评论


答:

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/......