当前位置: 首页 > 知识库问答 >
问题:

Mono与Spring Cloud Stream

简培
2023-03-14

我在尝试将Reactor的Mono与Spring Cloud Stream一起使用时遇到了一个问题,无法真正弄清楚发生了什么。

想象一下,我有一个这样的听众:

@StreamListener
@Output(Urls.OUTUT)
public Flux<String> expandUrls(@Input(Urls.INPUT) Flux<String> urlFormats)
{
    return urlFormats
        .map(this::expandUrl)
        .flatMapIterable(urls -> urls);
}

因此,它基本上是将一个格式如下的url扩展成这样

< code > http://www . example . com/page/1

http://www.example.com/page/2

http://www.example.com/page/3

它按预期工作,但是当我尝试这样做时:

@StreamListener
@Output(Urls.OUTPUT)
public Flux<String> expandUrls(@Input(Urls.INPUT) Mono<String> urlFormats)
{
    return urlFormats
        .repeat(3)
        .zipWith(pageNumbers)
        .map(this::formatUrl);
}

其中pageNumber是Flux.fromStream(Stream.eiterate(1,p-

我得到以下例外

Caused by: java.lang.IllegalArgumentException: A method annotated with @StreamListener may use @Input or @Output annotations only in declarative mode and for parameters that are binding targets or convertible from binding targets.

我通过这样做来消除这个异常

@StreamListener(value = Urls.INPUT)
@Output(Urls.OUTPUT)
public Flux<String> expandUrls(Mono<String> urlFormats)
{
    return urlFormats
        .repeat(3)
        .zipWith(pageNumbers)
        .map(this::formatUrl);
}

但现在我明白了:

Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'http': was expecting ('true', 'false' or 'null')
 at [Source: http://www.example.com/page-%d,1,0.html;

我的问题是:如何使用Mono和Spring Cloud Stream。有可能这样使用它吗?如果是,那么怎么做呢?哦,我用Kafka做中间人。


共有1个答案

狄楷
2023-03-14

Spring Cloud Stream StreamListener的@输入参数类型仅支持反应器类型Flux,因为它比在@输入参数类型上具有Mono更适合反应性流应用程序。

 类似资料:
  • 我很难理解mono 的用法。请问这个Mono 能给Mono带来什么样的好处? 谢谢。

  • 问题内容: 我在BigInteger的.Net项目Mono实现中使用(链接)。在Java中,我使用java.math.BigInteger。 相同的代码在Java中产生不同的结果。 .Net代码 Java代码。相同的inputBytes数组,相同的指数和模数,但结果不同。 我不明白为什么结果不同。 PS,例如,如果我使用InputBytes Java和.Net中的结果相同 魔术在哪里? 问题答案:

  • 假设我有以下流程 只是为了理解 因此,我有 但我需要 继续皱眉 这个问题有什么好的解决办法吗?

  • Mono 是一个由 Novell 公司主持的项目。该项目的目标是创建一系列符合ECMA 标准(Ecma-334 和Ecma-335)的.NET 工具,包括C# 编译器和共通语言执行平台。与微软的.NET Framework 不同,Mono 项目不仅可以运行于Windows 系统上,还可以运行于Linux,FreeBSD,Unix,Mac OS X 和Solaris。 Mono 的开发工具 Mono

  • 我有一个函数返回,我想将它映射到(因为这是我在控制器方法中返回的东西)。 是否有更好的方法返回而不是? 我不能使用,因为映射函数不能接受s。

  • 好吧,所以我有下面的方法,但我试图摆脱使用。块(),因此尝试实现Mono,但得到错误< code >所需的类型:List 原始代码 我尝试以非阻塞方式重构使用 Mono