[英]io.smallrye.mutiny.Uni multi threading doesn't work (Quarkus)
[英]reactive messaging - ClassCastException cannot be cast to class io.smallrye.mutiny.Multi
@Incoming("from-processor-to-consumer")
public Multi<Void> consume(Multi<String> stream) {
return stream.onItem()
.invoke(msg -> {
log.infof("consumer received %s", msg);
})
.onItem()
.ignore();
}
运行此方法时会引发ClassCastException
:
consume has thrown an exception: java.lang.ClassCastException: class java.lang.String cannot be cast to class io.smallrye.mutiny.Multi
我可以消费Multi<String>
吗?
查看SmallRye Reactive Messaging > Development Model > Consuming Payloads ,看来我一次只能使用一条消息。
首先,我必须承认错误信息是无用的,应该改进。
问题是您的应用程序签名。
@Incoming("from-processor-to-consumer")
@Outgoing("this-is-missing-in-your-code")
public Multi<Void> consume(Multi<String> stream) {
return stream.onItem()
.invoke(msg -> {
log.infof("consumer received %s", msg);
})
.onItem()
.ignore();
}
缺少@Outgoing
注释。 返回Multi,
您需要说“在哪里”。
如果您的方法是终端(意思是最终消费者),则不能注入Multi
。 解决方法是使用简单的无操作方法:
@Incoming("from-processor-to-consumer")
@Outgoing("this-is-missing-in-your-code")
public Multi<String> consume(Multi<String> stream) {
return stream.onItem()
.invoke(msg -> {
log.infof("consumer received %s", msg);
});
}
@Incoming("this-is-missing-in-your-code")
void noop(String s) { }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.