在Spring Integration中,我有一个DSL设置,看起来像这样:
---> --->
---> --->
Messages --> Gateway ---> QueueChannel ---> MessageHandler(worker) -> QueueChannel ---> MH worker2 --> ...
---> --->
---> --->
我想为此编写一个集成测试,它将测试消息是否在正确的渠道中。我现在在任何地方都没有丰富标题,所以我想使用:
this.someChannel.receive(TIMEOUT)
不幸的是,据我了解,它只阻塞了测试的主线程,而不是全部,因此它无法接收任何异步发送的消息。 我知道,存在类似的东西:
this.someChannel.getReceiveCount()
它给了我很好的结果,但检查它对我来说还不够。 我如何处理它,以异步方式接收发送到队列的消息?
编辑:重要的是,我需要它,因为消息在通过工作流程期间被更改
您可以将通道拦截器添加到测试中的这些队列通道,以跟踪通过这些通道的任何内容。当然,您需要在测试中设置一些屏障来等待异步消息,或者只是阻塞队列以收集它们以便在测试结束时进行验证。另一种方法是模拟或监视介于两者之间的消息处理程序,但再次使用类似的CountDownLatch
或BlockingQueue
线程屏障来等待异步消息。在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/5.2.3.RELEASE/reference/html/testing.html#test-context