【问题标题】:Why does kafkaTemplate send methods not work with a nullable key?为什么 kafkaTemplate 发送方法不适用于可为空的键?
【发布时间】:2020-09-24 16:44:16
【问题描述】:

https://docs.spring.io/spring-kafka/docs/current/api/org/springframework/kafka/core/KafkaTemplate.html#sendDefault(K,V)

使用可空键从 kotlin 调用上述方法会导致编译器警告。密钥不应该可以为空吗?偶尔想在没有密钥的情况下生成消息是合法的。

【问题讨论】:

    标签: spring-boot kotlin spring-kafka


    【解决方案1】:

    如果您不想传递密钥,您可以使用很多重载方法 one,它们只接受 topicvalue

    public ListenableFuture<SendResult<K,​V>> send​(java.lang.String topic, @Nullable V data)
    

    根据docs 的语法,只有value 可以为空,因为它带有@Nullable 注释

    public ListenableFuture<SendResult<K,​V>> send​(String topic, K key, @Nullable V data)
    

    【讨论】:

    • 虽然这个答案是正确的,但我认为在关键参数中添加 @Nullable 没有任何问题。
    • 是的,你们已经提供了带有可变参数的重载方法,我觉得这些方法可以根据要求使用@GaryRussell
    • 现在如果我想发送一个可为空的密钥,我需要写key?.let { kafkaTemplate.sendDefault(it, value) }?: kafkaTemplate.sendDefault(value)。如果我们添加注解,它将变为kafkaTemplate.sendDefault(key, value)
    • 如果key 为空,我会建议使用另一种重载方法,没有必要发送空键@JacobBotuck
    猜你喜欢
    • 2020-09-25
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多