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