提供请求-答复支持的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请求-答复支持中的设计缺陷?