繁体   English   中英

反应式消息传递 - ClassCastException 无法转换为 class io.smallrye.mutiny.Multi

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM