SpringBoot整合Kafka(5)
1 消息转发
1.1 @sendTo注解方式
配置ConcurrentKafkaListenerContainerFactory的ReplyTemplate,@SendTo是直接将监听方法的返回值转发对应的Topic中,但转发Topic成功后,不会被请求者消费!
@Bean
public ConcurrentKafkaListenerContainerFactory<Integer, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<Integer, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
factory.setReplyTemplate(kafkaTemplate());
return factory;
}
package zhw.example.zhw.kafka;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
@Component
public class ForwardListener {
private static final Logger log= LoggerFactory.getLogger(ForwardListener.class);
@KafkaListener(id = "forward", topics = "topic.quick.target")
@SendTo("topic.quick.real")
public String forward(String data) {
log.info("topic.quick.target forward "+data+" to topic.quick.real");
return "topic.quick.target send msg : " + data;
}
}
1.2 ReplyTemplate方式
配置KafkaMessageListenerContainer监听容器和ReplyingKafkaTemplate转发接口
package zhw.example.zhw.kafka;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org