spring-kafka请求答复:请求和答复的不同类型

时间:2018-11-05 09:54:22

标签: apache-kafka spring-kafka

提供请求-答复支持的ReplyingKafkaTemplate文档(在Spring-Kafka 2.1.3中引入)建议对请求和答复使用不同的类型:

ReplyingKafkaTemplate<K, V, R>

其中参数化类型K表示消息密钥,V表示值(即请求),R表示答复。

到目前为止很好。但是用于实现服务器端Request-Reply的相应支持类似乎并不支持V,R的不同类型。该文档建议使用带有添加的@SendTo批注的KafkaListener,该批注在幕后在MessageListenerContainer上使用已配置的ReplyTemplate 。但是AbstractKafkaListenerEndpoint只支持侦听器和replyTemplate的单一类型:

public abstract class AbstractKafkaListenerEndpoint<K, V>
        implements KafkaListenerEndpoint, BeanFactoryAware, InitializingBean {

    ...

    /**
     * Set the {@link KafkaTemplate} to use to send replies.
     * @param replyTemplate the template.
     * @since 2.0
     */
    public void setReplyTemplate(KafkaTemplate<K, V> replyTemplate) {
        this.replyTemplate = replyTemplate;
    }

    ...

}

因此,V和R必须是同一类型。

文档中使用的示例确实将String用于请求和答复。

我是否遗漏了一些东西,还是应该报告并更正Spring-Kafka请求-答复支持中的设计缺陷?

1 个答案:

答案 0 :(得分:1)

这是fixed in the 2.2 release

对于早期版本,只需注入原始KafkaTemplate(没有泛型)。