如何在发布订阅频道中测试交付?



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

现在,我想测试发送方和处理程序是否同意通过通道发送的特定对象类型(Message正文的类型(。AFAIU 我有两种方法可以测试这一点:

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

我不知道该怎么做(1(。我想我可以通过听errorChannel来做 (2((那里应该没有消息(,但我不太明白我应该等待多久的错误消息。

有什么建议吗?

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

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

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

最新更新