簡體   English   中英

“發現不明確的參數類型 Void”? Spring 與 Project Reactor 集成

[英]"Found ambiguous parameter type Void"? Spring Integration with Project Reactor

我正在使用帶有 Spring 集成的 Project Reactor 從 Kafka 讀取並寫入 MongoDB,我的 Kafka 使用效果很好,但是.handle(MongoDb.reactiveOutboundChannelAdapter(mongoFactory))卡住了。 我已經看到這個 function 的內部代碼是new ReactiveMongoDbStoringMessageHandler(mongoFactory)) ,所以我嘗試了以下(我有一個transform()方法從ConsumerRecord轉換為Mono<String> ,帶有@Transformer注釋) :

    public IntegrationFlows writeToMongo() {
         return IntegrationFlows.from(kafkaChannel)
              .transform(this)
              .handle(new ReactiveMongoDbStoringMessageHandler(mongoFactory))
              .get();
    }

代碼遵循文檔https://docs.spring.io/spring-integration/reference/html/mongodb.html#mongodb-reactive-channel-adapters 我得到的錯誤是: java.lang.IllegalArgumentException: Found ambiguous parameter type [class java.lang.Void] for method match:然后是一長串函數。 這可能發生的任何原因?

如果您不打算訂閱返回的Mono ,則不能執行new ReactiveMongoDbStoringMessageHandler(mongoFactory) .handle(MongoDb.reactiveOutboundChannelAdapter(mongoFactory))是正確的方法,因為它將ReactiveMessageHandlerAdapter ReactiveMongoDbStoringMessageHandler以進行自動訂閱。

但是我認為您真正的問題在於.transform(this) 我相信你在這個 class 中有很多方法,所以方法名稱要更具體。 而這與 Project Reactor 無關。 不確定為什么要在發送到該ReactiveMongoDbStoringMessageHandler之前嘗試轉換為Mono ...您可能在提供不是 MongoDB 映射實體以保存到集合中的有效負載( ConsumerRecord ?)時遇到問題。

也發生在我身上。 解決方案是(注意 ReactiveMessageHandlerAdapter):

public IntegrationFlows writeToMongo() {
     return IntegrationFlows.from(kafkaChannel)
          .handle(new ReactiveMessageHandlerAdapter(new ReactiveMongoDbStoringMessageHandler(mongoFactory)))
          .get();
}

解決此問題后,可以將其替換為handleReactive()

暫無
暫無

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

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