首页 > 解决方案 > Spring Cloud Stream Listener 没有暂停/等待集成测试代码中的消息

问题描述

我有一个通过 Spring Cloud Stream 连接到 RabbitMQ 的应用程序,它运行良好。

对于集成测试用例,我正在尝试使用示例 - https://github.com/piomin/sample-message-driven-microservices/blob/master/account-service/src/test/java/pl/piomin/services/ account/OrderReceiverTest.java

但是,在我的情况下,我的应用程序会在某个时间间隔内发回 3 条消息。因此,如果我输入以下行,它会获取消息,但如果获取消息有延迟。

 int i = 1;
    while (i > 0) {
        Message<String> received = (Message<String>) collector.forChannel(channels.statusMessage()).poll();
        if (received != null) {
            LOGGER.info("Order response received: {}", received.getPayload());
        }
    }
  1. 因此,除了我的自定义轮询之外,有什么方法可以让我等待并轮询我的消息,并在我收到这些消息时停止?
  2. 我想根据不同通道的响应路由密钥获取选择消息。可能吗 ?--> 例子:如果 routingKey 是 "InProcess" ,它应该去 Inprocess 方法。

标签: spring-bootintegration-testingspring-cloud-stream

解决方案


1)您的问题根本不清楚,请对其进行扩展并准确解释您的意思。

2) 路由键在 Rabbit 内部用于路由到不同的队列,它们在框架内不用于路由到通道或方法。

但是,您可以condition@StreamListener(匹配headers['amqp_receivedRoutingKey]`)上使用 a,但最好将消息路由到不同的队列。


推荐阅读