我的应用程序中有一个PublishSubscribeChannel
,它应该将消息传递到同一 JVM 中的不同MessageHandlers
。处理程序使用@StreamListener
注释订阅通道。通道使用Executors
因此传递是异步的。
现在,我想测试发送方和处理程序是否同意通过通道发送的特定对象类型(Message
正文的类型(。AFAIU 我有两种方法可以测试这一点:
- 查找给定频道的所有订阅者并验证其 签名。
- 向通道发送消息,并验证没有处理程序引发异常。
我不知道该怎么做(1(。我想我可以通过听errorChannel
来做 (2((那里应该没有消息(,但我不太明白我应该等待多久的错误消息。
有什么建议吗?
对于 1,您可以使用反射查看通道调度程序中的处理程序集合;然后再次使用反射查看处理程序的Method
。
但是,你的设计是有缺陷的,除非你不介意丢失消息;一旦你交给执行者,传入的消息就会被确认;如果服务器崩溃,消息就会丢失。
如果您摆脱了执行器,则向通道添加拦截器会更简单,该拦截器将在其afterSendCompletion()
方法中收到任何异常的通知(满足您的 2(。