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

问题测试多个Spring-Cloud-Stream应用程序

任伟
2023-03-14

场景:我有3个Spring Cloud流媒体应用程序

  • 1'st:将XML有效负载解组为JAXB对象
  • 2'nd:将JAXB有效负载转换为我们的域POJO
  • 3'rd:验证域对象

我正在尝试测试第三个应用程序。我已将第一个和第二个应用程序作为测试依赖项。我添加了:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-stream-test-support</artifactId>
        <scope>test</scope>
    </dependency>

现在,我有大约20个xml文件,其中包含各种验证场景。第一个测试运行良好。我能够通过以下方式获取频道的预期消息

    final Message<PaymentInstruction> mceMessage =
            (Message<PaymentInstruction>) collector.forChannel(
                    validationBindings.mce()).take();

运行的第二个测试是我有问题的地方。测试只是坐在“获取”处。

我在spring-integration-core-4.3.8中做了一些挖掘。jar并已将问题跟踪到org。springframework。集成。调度员。AbstractDispatcher:

@Override
public synchronized boolean addHandler(MessageHandler handler) {
    Assert.notNull(handler, "handler must not be null");
    Assert.isTrue(this.handlers.size() < this.maxSubscribers, "Maximum subscribers exceeded");
    boolean added = this.handlers.add(handler);
    if (this.handlers.size() == 1) {
        this.theOneHandler = handler;
    }
    else {
        this.theOneHandler = null;
    }
    return added;
}

有一个为第一个测试添加的处理程序,因此它将null分配给“this”。theOneHandler'

我的选择是:

  • 重构其他两个项目中的代码,这样我就可以进行域对象的解组和创建,而不需要spring cloud应用程序代码
  • 我可以为每个测试用例创建一个单独的单元测试类,但是我不想走这条路,因为spring boot的启动时间很长,会乘以测试用例的数量
  • 我是否缺少一些允许我拥有这些多个处理程序的配置,或者我是否打破了我想要使用Spring-Cloud-Stream的方式

环境:

  • Java8更新131
  • org.springframework.cloud:Spring云依赖项:Dalston。释放
  • org.springframework.boot:spring-boot-依赖项:1.5.2。释放

共有1个答案

周阳波
2023-03-14

当一个频道只有一个订户时,one Handler是一种调度优化。

听起来您将所有服务绑定到同一个频道,这不是您想要的。

归根结底,您不能做您想做的事情,因为每个服务都使用相同的频道名称(可能是输入)。

您需要在单独的应用程序上下文中加载每个服务,并使用网桥将它们连接在一起。

编辑

您还可以使用聚合应用程序测试它们。

 类似资料:
  • 我在测试我的Spring Cloud stream服务(写入Kafka流)时遇到问题。它基于以下baeldung介绍 这是服务代码(具体省略) 这是测试 非常直接,但是在执行测试时,我得到一个NullPointerException,因为轮询返回一个Null。 知道问题是什么吗? 谢谢

  • 我不确定我的理解是否正确。我们启动了一个Spring云流应用程序并订阅了一个主题。该应用程序将运行并暂停该主题以获取新消息,除了我们发送终止信号退出。我在想我们是否可以明确退出Spring云应用程序,比如等待5分钟但没有新消息进来?或者处理了1000条记录并退出?

  • 我已经用Rabbitmq绑定器设置了一个Spring Cloud stream。我想用Spring Cloud stream做性能测试。有什么方法可以用它做性能测试吗?

  • 我一直在玩Spring Cloud Stream应用程序启动器中的路由器接收器,我对内容类型有一个问题。 我正在向路由器发送一个JSON字符串,我想编写一个SpEL表达式来确定路由。但是,即使我通过修改项目中的JUnit测试用例来运行它,“有效负载”也会显示为字符串,而不是解析的JSON。当为过滤器处理器运行JUnit测试用例时,也是在Spring Cloud Stream App Starter

  • null 我正在尝试为SQS编写一个集成测试。 我有一个本地运行的localstack docker容器,其中SQS在上运行 在我的测试代码中,我定义了一个endpoint设置为Local4576的SQS客户机,它可以成功地连接和创建队列、发送消息和删除队列。我还可以使用SQS客户机接收消息并拾取我发送的消息。 我的问题是,如果我为了允许另一个组件获得消息而删除了正在手动接收消息的代码,似乎什么也

  • 我试图用Spring的云流Kafka流来阅读Kafka。然后我在一分钟的时间窗口内汇总事件,并将其转移到不同的主题。然后,我需要从主题中读取聚合事件,并将其写入另一个主题,同时将该主题与另一个Kafka集群中的不同主题绑定。但我得到了下面的例外。 我按照链接中的示例,尝试了下面的代码。 应用属性 哈格。JAVA Transporter.java EGSRC处理器。JAVA