![](/img/trans.png)
[英]Spring Integration java.lang.IllegalArgumentException: Found ambiguous parameter type
[英]"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.