【问题标题】:Issue testing multiple spring cloud stream apps问题测试多个 Spring Cloud Stream 应用程序
【发布时间】:2017-04-21 05:27:46
【问题描述】:

场景:我有 3 个 spring 云流媒体应用

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

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

    <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.integration.dispatcher.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'

我的选择是:

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

环境:

  • Java 8 更新 131
  • org.springframework.cloud:spring-cloud-dependencies:Dalston.RELEASE
  • org.springframework.boot:spring-boot-dependencies:1.5.2.RELEASE

【问题讨论】:

    标签: spring-integration spring-test spring-cloud-stream


    【解决方案1】:

    theOneHandler 是在频道只有一个订阅者时使用的调度优化。

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

    底线是你不能做你想做的事,因为每个服务都使用相同的频道名称(大概是input)。

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

    编辑

    您也可以使用aggregated application 对其进行测试。

    【讨论】:

    • 您也可以使用聚合应用程序将它们连接在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2017-03-22
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多