如何在PublishSubscribeChannel中测试传递?

时间:2018-10-21 16:08:19

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

我的应用程序中有一个PublishSubscribeChannel,该应用程序应该将消息传递到同一JVM中的不同MessageHandlers。使用@StreamListener批注将处理程序订阅到频道。频道使用Executors,因此传递是异步的。

现在,我想测试发送者和处理者是否同意通过通道发送的特定对象类型(Message主体的类型)。 AFAIU我有两种测试方法:

  1. 查找给定频道的所有订户并验证其 签名。
  2. 向通道发送一条消息,并确认没有处理程序引发异常。

我不知道该怎么做(1)。而且我认为我可以通过听errorChannel(那里应该没有消息)来做(2),但是我不太明白我应该等待多长时间才能收到错误消息。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

对于1,您可以使用反射来查看通道的调度程序中处理程序的集合;然后再次使用反射来查看处理程序的Method

但是,您的设计存在缺陷,除非您不介意丢失消息。一旦您移交给执行者,传入的消息就会被确认;如果服务器随后崩溃,则消息将丢失。

如果您摆脱了执行程序,则将拦截器添加到通道会更简单,该通道将在其afterSendCompletion()方法(满足您的2)中收到任何异常的通知。