簡體   English   中英

ClassCastException 與 Spring 雲和 Kafka 流

[英]ClassCastException with Spring Cloud and Kafka Streams

我正在啟動一個新的 SB 應用程序,它將充當 Kafka 的消費者,並且我開始使用 Kafka Streams,但是在啟動應用程序時出現以下異常

java.lang.ClassCastException: class com.sun.proxy.$Proxy101 cannot be cast to class org.springframework.messaging.MessageChannel (com.sun.proxy.$Proxy101 and org.springframework.messaging.MessageChannel are in unnamed module of loader 'app') at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindConsumer(AbstractMessageChannelBinder.java:91) ~[spring-cloud-stream-3.1.2.jar:3.1.2] at org.springframework.cloud. stream.binder.AbstractBinder.bindConsumer(AbstractBinder.java:143) ~[spring-cloud-stream-3.1.2.jar:3.1.2] at org.springframework.cloud.stream.binding.BindingService.lambda$rescheduleConsumerBinding$1( BindingService.Z93F725A07423FE1C889F448B 33D21F46Z:201) ~[spring-cloud-stream-3.1.2.jar:3.1.2] at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.5 .jar:5.3.5] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na] at java.base/java.util.concurrent.FutureTask.run (FutureTask.java:264) ~[na:na] at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na] at java.base/java.util .concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] 在 java.base/java.util。 concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:an]

這就是我聲明 KStream 的方式,它計算一個單詞的發送次數:

@Bean
  public Consumer<KStream<Bytes, String>> target() {
    return input -> input.flatMapValues(value -> Arrays.asList(value.toLowerCase().split("\\W+")))
        .map((key, value) -> new KeyValue<>(value, value))
        .groupByKey(Grouped.with(Serdes.String(), Serdes.String()))
        .windowedBy(TimeWindows.of(Duration.ofMillis(30000))).count(Materialized.as("words-count"))
        .toStream().map((key, value) -> new KeyValue<>(null, new WordCount(key.key(), value,
            new Date(key.window().start()), new Date(key.window().end()))));
  }

使用相同的 application.yml 並有一個消費者 function 只接收這樣的消息

@Bean
  public Consumer<Message<String>> target() {
    return message -> {
      System.out.println("******************");
      System.out.println("Received message from source: " + message.getPayload());
    };
  }

一切正常。

我正在使用以下版本:

  • SpringBoot v2.4.4
  • SpringCloud v.2020.0.2
  • Java v11.0.10

我在單元測試期間看到過其他帶有此錯誤的帖子,但我什至還沒有進行任何 Junit 測試。

任何幫助將不勝感激

看起來您在類路徑中沒有 Kafka Streams 活頁夾,但有消息通道活頁夾。 確保你在類路徑上有依賴spring-cloud-stream-binder-kakfa-streams

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM