首页 > 解决方案 > @Autowired 错误:变量 kafkaTemplate 可能尚未初始化

问题描述

kafkaTemplate 被注入

    @Bean
    @Qualifier("kafkaTemplate")
    public KafkaTemplate<String, QuoteResponseDetails> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }

并且您想使用注入的代码。


@WebSocket(maxTextMessageSize = 64 * 1024)
@RequiredArgsConstructor
public class QuoteSocket {
    @Autowired
    private final KafkaTemplate<String, QuoteResponseDetails> kafkaTemplate;

    private static final String TOPIC = "kafka-spring-producer-coin-test";

    private final CountDownLatch closeLatch;

    @SuppressWarnings("unused")
    private Session session;

    public QuoteSocket(){
        this.closeLatch = new CountDownLatch(1);
    }


    @OnWebSocketMessage
    public void onMessage(String msg) throws JsonProcessingException, ParseException {
        ObjectMapper mapper = new ObjectMapper();
        System.out.printf("Got msg: %s%n",msg);
        JSONParser parser = new JSONParser();
        JSONObject obj = (JSONObject)parser.parse(msg);

        Set key = obj.keySet();
        if (!key.contains("status")){
            QuoteResponse quote = mapper.readValue(msg, QuoteResponse.class);
            System.out.println(quote.getContent());

            kafkaTemplate.send(TOPIC,quote.getContent());
        }

    }
}

不能使用 kafkaTemplate。我有两个疑问。首先是它不能从 Websocket 线程访问。另一个怀疑是调用位置似乎是错误的。它是什么?当我从 websocket 收到消息时,我想将其发送到 kafka。为什么?

标签: spring-bootapache-kafkaspring-kafkaautowired

解决方案


推荐阅读